I want to update my models by an editable plotly dash-table (populated by a dataframe, himself populated by sqlconnection with models) in Django but I don't know how to :/ You will see my trials in code comments, but obviously, it doesn't work. Any solution for this pls?
Here a class in exemple in models.py (same structure for each class):
class interventions_acm1(models.Model):
date_debut = models.CharField(max_length=30, null=True)
date_fin = models.CharField(max_length=30, null=True)
titre_intervention = models.CharField(max_length=30, null=True)
cout = models.CharField(max_length=30, null=True)
responsable_acm = models.CharField(max_length=30, null=True)
entreprise_exec = models.CharField(max_length=30, null=True)
descriptif = models.CharField(max_length=150, null=True)
And views.py which contain table and connection with models:
from django_plotly_dash import DjangoDash
import dash_html_components as html
import dash_table
import dash_core_components as dcc
from dash.dependencies import Input, Output, State
import pandas as pd
from django.db import connection
from django.db.models import Q
from django.shortcuts import render
from django.http import HttpResponse
from .models import interventions_acm1, interventions_acm4, interventions_acm5, interventions_acm9, interventions_acm10
#from sqlalchemy import create_engine
# Create your views here.
def interventions(request):
#table_data = table_donnees()
app = DjangoDash('Tableau_intervention')
Magasin_interventions_real = request.GET.get('Magasin_interventions_real')
Annee_mois_dispo_interv = request.GET.get('Annee_mois_dispo_interv')
#if Magasin_data_query != '':
query = str(interventions_acm1.objects.all().query)
if Magasin_interventions_real == 'ACM1':
query = str(interventions_acm1.objects.all().query)
elif Magasin_interventions_real == 'ACM4':
query = str(interventions_acm4.objects.all().query)
elif Magasin_interventions_real == 'ACM5':
query = str(interventions_acm5.objects.all().query)
elif Magasin_interventions_real == 'ACM9':
query = str(interventions_acm9.objects.all().query)
elif Magasin_interventions_real == 'ACM10':
query = str(interventions_acm10.objects.all().query)
df_interventions_real = pd.read_sql_query(query, connection)
def annees_mois_dispo_interventions():
ann_mois_dispo = (df_interventions_real["date_fin"]).str[:-3].unique().tolist()
return (ann_mois_dispo)
annee_mois_dispo_interventions = annees_mois_dispo_interventions()
date_mois = "2022-03"
date_mois = Annee_mois_dispo_interv
#date_mois = ["2022-03","2022-01"]
df_interventions_real = df_interventions_real[df_interventions_real['date_fin'].str.contains(date_mois)]
PAGE_SIZE = 10
#nmb_clicks = 0
app.layout = html.Div([
#dcc.Store(id='click-memory', data = {'nmb_clicks': nmb_clicks}),
dash_table.DataTable(
id='adding-rows-table',
columns=[{'id': i, 'name': i} for i in df_interventions_real.columns],
data=df_interventions_real.to_dict('records'),
editable=True,
row_deletable=True,
page_size=10, # we have less data in this example, so setting to 20
style_table={'height': '195px', 'overflowY': 'auto'},
style_header={
'backgroundColor': 'white',
'fontWeight': 'bold'
},
),
])
#mysql_str = f'mysql://{"dbadmin"}:{"adm%acm"}@{"localhost"}:{"3306"}/{"djangodatabase"}'
#cnx = create_engine(mysql_str)
#@app.callback(Output('adding-rows-table', 'columns'),
# [State('click-memory', 'data')])
#def update_dropdown(click, name, data):
# if click != data['nmb_clicks']:
# if name not in df_interventions_real.columns:
# df_interventions_real[name] = [float('nan')] * len(df_interventions_real.index)
# new_df = df_interventions_real[0:1]
# data.to_sql('interventions_acm1', con=cnx, if_exists='replace')
# #return [{"name": i, "id": i} for i in df_interventions_real.columns]
# return new_df
#@app.callback(Output('click-memory', 'data'),
# [State('click-memory', 'data')])
#def on_data(click, data):
# if click != nmb_clicks:
# data['nmb_clicks'] = data['nmb_clicks'] + 1
#
# return data
if __name__ == '__main__':
app.run_server(debug=True)
return render(request, 'interventions/interventions.html',{'annee_mois_dispo_interventions':annee_mois_dispo_interventions})
Thank you in advance for your help