Передача 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

Вернуться на верх