从 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
)
正如标题所说:我如何(在 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
)