Session state- st.form

Hi everyone.

I have a problem that I can’t identify, I can’t keep the session state and it ends up being lost when applying the submit. I appreciate any idea or help.

   # Conectar con DuckDB en memoria fuera del formulario
    con = duckdb.connect(database=':memory:', read_only=False)

    if result_df_filtrado['Familia'].isin(['ET', 'ED', 'EG']).any():
        df_recuentos_selected = milimetros(result_df_filtrado)
        df_recuentos_selected = df_recuentos_selected[['Componente', 'Descripcion', 'Familia', 'Grupo', 'Formato', 'CoefAS', 'Unidad_Trabajo', 'Unidades', 'Ubicacion', 'Stock', 'Stock_m2', 'Stock_milimetros']]
    else:
        df_recuentos_selected = result_df_filtrado[['Componente', 'Descripcion', 'Familia', 'Grupo', 'Formato', 'Unidad_Trabajo', 'Unidades', 'Ubicacion', 'Stock']]

    # Agregar columnas adicionales
    df_recuentos_selected['Recuento'] = 0
    df_recuentos_selected['Recuento_Picos'] = 0
    df_recuentos_selected['Difference'] = 0

    if 'df_recuentos_selected' not in st.session_state:
        st.session_state.df_recuentos_selected = df_recuentos_selected.copy()

    # Registrar DataFrame en DuckDB
    con.register('df_recuentos_selected', df_recuentos_selected)

    # Crear el formulario
    with st.form("my_form"):
        # Obtener el DataFrame del estado de sesión
        df_recuentos_selected = con.execute("SELECT * FROM df_recuentos_selected").fetchdf()

        # Editar el DataFrame
        selection = st.data_editor(dataframe_with_selections(df_recuentos_selected), hide_index=True, key='0')

        # Si se envía el formulario, aplicar cambios
        if st.form_submit_button("Submit"):
            # Aplicar cambios según la condición
            if selection['Familia'].isin(['ET', 'ED', 'EG']).any():
                selection = apply_changes(selection)
            else:
                selection = apply_changes_2(selection)

            # Actualizar DataFrame en sesión
            st.session_state.df_recuentos_selected = selection.copy()

            # Filtrar el DataFrame para mostrar solo las filas seleccionadas
            selection_filtered = selection[selection['Select']]

            # Mostrar el DataFrame filtrado
            st.write("Su selección con prueba de significación basada en medio Formato:", key="filtered_selection")
            st.write(selection_filtered, key="filtered_selection")

            if selection['Familia'].isin(['ET', 'ED', 'EG']).any():
                # Aplicar la función para evaluar la diferencia y actualizar la columna "Corregir_Stock"
                selection['Corregir_Stock'] = selection.apply(lambda row: es_significativo(row['Stock_milimetros'], row['Recuento']), axis=1)
                grouped_df = selection.groupby(['Componente', 'Descripcion', 'Familia', 'Grupo']).agg({
                    'Stock': 'sum',
                    'Stock_m2': 'sum',
                    'Stock_milimetros': 'sum',
                    'Difference': 'sum',
                    'Ajuste_SGANL': 'sum'
                })
            else:
                selection['Corregir_Stock'] = selection.apply(lambda row: es_significativo(row['Stock'], row['Recuento']), axis=1)
                grouped_df = selection.groupby(['Componente', 'Descripcion', 'Familia', 'Grupo']).agg({
                    'Stock': 'sum',
                    'Recuento': 'sum',
                    'Difference': 'sum'
                })

    # Cerrar la conexión con DuckDB
    con.close()

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.