Данные из Django-модели не отображают обновления в приложении Django dash

import plotly.express as px
import pandas as pd
from django_plotly_dash import DjangoDash

from product.models import Products

app = DjangoDash("SimpleExample")
products = Products.objects.all()
to_dic = list(Products.objects.all().values("name", "price"))
keys_are = []
values_are = []
dictionary = {}
for i in to_dic:
    keys_are.append(i["name"])
    values_are.append(i["price"])
dictionary["name"] = keys_are
dictionary["price"] = values_are
opts = []
for i in to_dic:
    opts.append({"label": i["name"], "value": i["price"]})
app.layout = html.Div(
    [
        html.Div(
            children=[
                html.Label("Products"),
                dcc.Dropdown(id="pid", options=opts, value=values_are[0]),
            ],
            style={"padding": 10, "flex": 1},
        ),
        html.Div(id="gr_container", children=[]),
        html.Br(),
        dcc.Graph(id="pro_graph", figure={}),
    ],
)


@app.callback(
    [
        Output(component_id="pro_graph", component_property="figure"),
        Output(component_id="gr_container", component_property="children"),
    ],
    [
        Input(component_id="pid", component_property="value"),
    ],
)
def update_graph(selected):
    message = "The option selected is :{}".format(selected)
    fig = px.bar(dictionary, x="name", y="price")
    return fig, message


if __name__ == "__main__":
    app.run_server(debug=True)

это мой файл dash-graph.py в проекте django, когда я запускаю проект, он показывает столбик на приборной панели, но когда я обновляю базу данных, т.е. модель продукта, он не обновляет столбик и показывает старый график, пока я не запущу сервер снова, также select box это только для тестирования, здесь это не используется.

import plotly.express as px
import pandas as pd
from django_plotly_dash import DjangoDash
from product.models import Products


app = DjangoDash("SimpleExample")

app.layout = html.Div(
    [
        html.Div(
            children=[
                html.Label("Products"),
                dcc.Dropdown(
                    id="pid",
                ),
            ],
            style={"padding": 10, "flex": 1},
        ),
        html.Div(id="gr_container", children=[]),
        html.Br(),
        dcc.Graph(id="pro_graph", figure={}),
    ],
)


@app.callback(
    [
        Output(component_id="pid", component_property="options"),
        Output(component_id="pro_graph", component_property="figure"),
        Output(component_id="gr_container", component_property="children"),
    ],
    [
        Input(component_id="pid", component_property="value"),
    ],
)
def update_graph(selected):
    products = Products.objects.all()
    to_dic = list(Products.objects.all().values("pk", "name", "price"))
    keys_are = []
    values_are = []
    dictionary = {}
    for i in to_dic:
        keys_are.append(i["name"])
        values_are.append(i["price"])
        opts.append({"label": i["name"], "value": str(i["pk"])})
    dictionary["name"] = keys_are
    dictionary["price"] = values_are
    opts = []
    message = "The option selected is :{}".format(selected)
    fig = px.bar(dictionary, x="name", y="price")
    return opts, fig, message```
    
moved it to update_graph function and it works
Вернуться на верх