Hello All,
I am new to streamlit. I want to create a form where user can provide multiple filters on the table columns and download data from table based on these filters. Here the table is static.
I want to create a add_filter
button which creates a new set of fields everytime it is clicked.
fields set:
filer: selectbox, options=[‘col1’,‘col2’,‘col3’]
operator: selecbox, options= [‘=’,‘!=’,‘>’,‘>=’,‘<’,‘<=’]
value: textbox
connector: selectbox, options=[‘And’,‘Or’]
I wrote function to create dynamic field set but it is not working. Provided code below.
Code snippet:
## function for dynamic filter
def addFilterSet():
col1 = st.session_state.col1
col2 = st.session_state.col2
col3 = st.session_state.col3
col4 = st.session_state.col4
counter = st.session_state.counter
filter_val = col1.selectbox('Field', ['Select','Col1','Col2','Col3'], index=0, key='filter'+str(counter))
operator_val = col2.selectbox('Operator', ['Select','>','>=','<','<=','=','!='], index=0, key='operator'+str(counter))
value_val = col3.text_input('Value',placeholder='Enter', key='value'+str(counter))
connector_val = col4.selectbox('Connector', ['Select','And','Or'], index=0, key='connector'+str(counter))
st.session_state.counter += 1
## form creation
with st.container():
st.header('Filter Section')
col1, col2, col3, col4 = st.columns([2,1,2,1])
if 'col1' not in st.session_state:
st.session_state.col1 = col1
st.session_state.col2 = col2
st.session_state.col3 = col3
st.session_state.col4 = col4
st.session_state.counter = 0
st.button(label='Add Filter', key='add_filter', on_click=addFilterSet())
Expected behavior:
Initially, only Add filter button should be present on the form
A new field set to be created everytime the Add filter button is clicked
Actual behavior:
Initially, one field set is appearing along with Add filter button. Once I clicked the button, getting error pop
Please let me know how to acheive the desired function.
Thank you,
Sownik Turaga.