dashboard.py
import pandas as pd
import dash
from dash import html, dcc
from django_plotly_dash import DjangoDash
from .models import Client, Data, RDV
import plotly.express as px
# Récupérer les données depuis les modèles Django
data = Data.objects.values('coll', 'client', 'tot_net')
clients = Client.objects.values('nom', 'prestations_soins', 'prestations_onglerie', 'prestations_coiffure')
rdv = RDV.objects.values('client', 'coll_reel')
# Convertir les données en DataFrames (à l'aide de pandas)
df_data = pd.DataFrame(list(data))
df_clients = pd.DataFrame(list(clients))
df_rdv = pd.DataFrame(list(rdv))
# Analyse des ventes par collaborateur (coll)
ventes_par_coll = df_data.groupby('coll')['tot_net'].sum().reset_index()
# Analyse des ventes par client
ventes_par_client = df_data.groupby('client')['tot_net'].sum().reset_index()
# Calcul du nombre total de prestations par client
df_clients['nombre_total_prestations'] = df_clients['prestations_soins'] + df_clients['prestations_onglerie'] + df_clients['prestations_coiffure']
# Nombre de rendez-vous par client
rdv_par_client = df_rdv['client'].value_counts().reset_index()
rdv_par_client.columns = ['client', 'nombre_de_rdv']
# Nombre de rendez-vous par collaborateur (coll)
rdv_par_coll = df_rdv['coll_reel'].value_counts().reset_index()
rdv_par_coll.columns = ['coll_reel', 'nombre_de_rdv']
# Créer une application Dash
app = DjangoDash('dashboard_app')
# Création des graphiques avec Plotly Express
fig_ventes_coll = px.bar(ventes_par_coll, x='coll', y='tot_net', title='Ventes par Collaborateur')
fig_ventes_client = px.bar(ventes_par_client, x='client', y='tot_net', title='Ventes par Client')
fig_prestations_clients = px.bar(df_clients, x='nom', y='nombre_total_prestations', title='Nombre de Prestations par Client')
fig_rdv_clients = px.bar(rdv_par_client, x='client', y='nombre_de_rdv', title='Nombre de Rendez-vous par Client')
fig_rdv_coll = px.bar(rdv_par_coll, x='coll_reel', y='nombre_de_rdv', title='Nombre de Rendez-vous par Collaborateur')
# Mise en page du tableau de bord
app.layout = html.Div(children=[
html.H1(children='Analyse des Données'),
# Graphique des ventes par collaborateur
dcc.Graph(
id='ventes-coll',
figure=fig_ventes_coll
),
# Graphique des ventes par client
dcc.Graph(
id='ventes-client',
figure=fig_ventes_client
),
# Graphique du nombre de prestations par client
dcc.Graph(
id='prestations-client',
figure=fig_prestations_clients
),
# Graphique du nombre de rendez-vous par client
dcc.Graph(
id='rdv-client',
figure=fig_rdv_clients
),
# Graphique du nombre de rendez-vous par collaborateur
dcc.Graph(
id='rdv-coll',
figure=fig_rdv_coll
)
])
import dash
from django.shortcuts import render
from openpyxl import load_workbook
from .models import Client, Data, RDV
from .models import Catalogue
from django.http import HttpResponse
#from django.shortcuts import render
from .dashboard import app
# MonApp/views.py
from dash import Dash, html, dcc
import plotly.express as px
#from django_plotly_dash import DjangoDash
#from django.shortcuts import render
from django_plotly_dash import DjangoDash
import pandas as pd
def dashboard_view(request):
# Rendre la vue avec le tableau de bord Dash
dash_content = app.to_html()
context = {'dash_content': dash_content}
return render(request, 'ManagerSalon360/dashboard.html', {'dash_content': context})
my dashboard.html
{% extends 'ManagerSalon360/base.html' %}
{% block content %}
<head>
<meta charset="UTF-8">
<title>Dashboard</title>
</head>
<body>
<div id="graph">
{{ dash_content | safe }}
</div>
</body>
{% endblock %}
the error that i received to my terminal
Internal Server Error: /ManagerSalon360/dashboard/
Traceback (most recent call last):
File "D:\MonLogiciel\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "D:\MonLogiciel\venv\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "D:\MonLogiciel\ManagerSalon360\views.py", line 239, in dashboard_view
dash_content = app.to_html()
AttributeError: 'DjangoDash' object has no attribute 'to_html'
[08/Jan/2024 17:34:27] "GET /ManagerSalon360/dashboard/ HTTP/1.1" 500 67831
Please help me. I dont know what i dont doing well