После получения form.cleaned_data из POST, как передать его в другое представление? - PullRequest
0 голосов
/ 29 марта 2019

как гласит заголовок: как я (в DJANGO) могу получить данные из формы в представлении (в приведенном ниже коде это представление ALIMENTA2) и затем использовать их в качестве контекста в другом представлении на основе классов (GMO, которое являетсяотчет в формате PDF, созданный с помощью easy_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'),
]

1 Ответ

0 голосов
/ 30 марта 2019

Вы можете сохранить переменные в сеансе, а затем получить их в другом представлении, например:

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
       )
...