Передача pk id базы данных Django в приложение Dash
Я успешно внедрил приложение Dash в мое приложение Django. Я могу отображать простые графики. Но что я хочу сделать, и не смог сделать, следуя документации, так это передать переменную pk id в приложение Dash, извлечь соответствующую информацию из БД в соответствии с этим pk, а затем построить график.
my urls.py:
urlpatterns = [
url(r'^$', views.home, name='home'),
url(r'^model/(?P<pk>\d+)/$', views.model, name='model'),
views.py:
def home(request):
return render(request, 'home.html')
def model(request, pk):
context = {'data' : {'pk': pk}}
return render(request, 'model_results.html', context)
шаблон models.html:
{%load plotly_dash%}
<body>
<div class="container">
<!--Row with two equal columns-->
<div class="row">
<div class="col-lg-1 col-md-1 col-xl-1 col-sm-1">
<div class = "card">
<div class = "card-body">
{%plotly_app name="tutorial_1" initial_arguments=data%}
</div>
</div>
</div>
</div>
</div>
</body>
и, наконец, мое приложение dash:
app = DjangoDash('tutorial_1')
app.layout = html.Div(children=[
html.H1(children='Dash Tutorials'),
dcc.Graph(
id='example',
figure={
'data': [
{'x': [1, 2, 3, 4, 5], 'y': [9, 6, 2, 1, 5], 'type': 'line', 'name': 'Boats'},
{'x': [1, 2, 3, 4, 5], 'y': [8, 7, 2, 7, 3], 'type': 'bar', 'name': 'Cars'},
],
'layout': {
'title': 'Basic Dash Example'
}
}
)
])
if __name__ == '__main__':
app.run_server(debug=True)
Из других примеров мне неясно, как я могу использовать Django ORM для получения необходимой информации, включив в приложение Dash что-то вроде doc_obj = model_example.objects.get(pk = pk)
.
Вы должны быть в состоянии сделать это, определив функцию обратного вызова в вашем DashApp так, чтобы у вас был доступ к args и kwargs, которые содержат необходимый контекст для запроса ORM. После этого вы сможете запросить Django ORM из функции обратного вызова, если вы правильно импортировали модель.
Пример (как указано в документации):
def callback_c(*args,**kwargs):
da = kwargs['dash_app']
return "Args are [%s] and kwargs are %s" %(",".join(args), kwargs)
django-plotly-dash: расширенный контекст: https://django-plotly-dash.readthedocs.io/en/latest/extended_callbacks.html#extended-callbacks