从 POST 获得 form.cleaned_data 后如何将其传递给另一个视图?

After getting a form.cleaned_data from POST how to pass it to another view?

正如标题所说:我如何(在 DJANGO 中)从视图中的表单获取数据(在下面的代码中是 ALIMENTA2 视图),然后将其用作另一个 class-based 视图中的上下文( GMO,这是一份使用 easy_pdf)?

构建的 PDF 报告

我是 django 的菜鸟,但我尝试过重定向和渲染...我似乎不太明白我在做什么,真的哈哈哈

views.py

def alimenta2(request):
    if request.method == 'POST':

        form = AlimentaForm(request.POST)

        if form.is_valid():

            day = form.cleaned_data['sign_date']
            shipper = form.cleaned_data['shipper']

            context = {'day': day, 'shipper': shipper}
            #HERE IS THE PROBLEM, I WANT TO PASS THE CONTEXT:
            return redirect('GMO', context=context)

    else: form = AlimentaForm()

    return render(request, 'agroex/alimenta2.html', {'form':form})

class GMO(PDFTemplateView):
    template_name = 'agroex/gmo.html'

    def get_context_data(self, **kwargs):
        context = super(GMO, self).get_context_data(
            pagesize='A4',
            title='NON-GMO Certificate',
            day=self.day,
            **kwargs
        )

urls.py

urlpatterns = [
    path('', views.agroex, name='agroex'),
    path('alimenta2/', views.alimenta2, name='alimenta2'),
    path('alimenta2/GMO/', views.GMO.as_view(), name='GMO'),
]

您可以将变量存储在会话中,然后在另一个视图中检索,如下所示:

def alimenta2(request):
    if request.method == 'POST':

        form = AlimentaForm(request.POST)

        if form.is_valid():

            day = form.cleaned_data['sign_date']
            shipper = form.cleaned_data['shipper']

            request.session['day'] = day
            request.session['shipper_id'] = shipper.id

            return redirect('GMO')

        else:
            form = AlimentaForm()
            return render(request, 'agroex/alimenta2.html', {'form':form})

class GMO(PDFTemplateView):
    template_name = 'agroex/gmo.html'

    def get_context_data(self, **kwargs):
        day = request.session['day']
        shipper_id = self.request.session['shipper_id']

        shipper = Shipper.objects.get(id=shipper_id)

        context = super(GMO, self).get_context_data(
                pagesize='A4',
                title='NON-GMO Certificate',
                day=day,
                shipper=shipper,
                **kwargs
       )