Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将表单数据传递给视图_Python_Django - Fatal编程技术网

Python 将表单数据传递给视图

Python 将表单数据传递给视图,python,django,Python,Django,我有以下看法: views.py def PackingListView(request): if request.method == "POST": form = PackingListForm(request.POST) if form.is_valid(): if 'preview' in request.POST: request.session['data'] = form.cleaned_

我有以下看法:

views.py

def PackingListView(request):
    if request.method == "POST":
        form = PackingListForm(request.POST)
        if form.is_valid():
            if 'preview' in request.POST:
                request.session['data'] = form.cleaned_data
                return redirect('myview')
  ....
class myview(View):
    def get(self, request, *args, **kwargs):

        data = request.session.pop('data', {})#this won't work  now

        pdf = render_to_pdf('packlist_preview.html', data)
        return HttpResponse(pdf, content_type='application/pdf')
我希望以
形式获取数据
并将其传递给下一个视图,然后将
数据
变量设置为它。这在以前是有效的,但一旦我将外键添加到此表单中,会话就不再有效,因为它不可序列化。我在这里最安全的方法是什么

views.py

def PackingListView(request):
    if request.method == "POST":
        form = PackingListForm(request.POST)
        if form.is_valid():
            if 'preview' in request.POST:
                request.session['data'] = form.cleaned_data
                return redirect('myview')
  ....
class myview(View):
    def get(self, request, *args, **kwargs):

        data = request.session.pop('data', {})#this won't work  now

        pdf = render_to_pdf('packlist_preview.html', data)
        return HttpResponse(pdf, content_type='application/pdf')
如果需要,也可以使用它-这里是
myview

url(r'^myview/', views.myview.as_view(), name='myview'),

如果将模型实例替换为其id,则应该能够序列化数据

data = form.cleaned_data
# remove object from data dict
related_object = data.pop('related_object')
# add in a reference
data['related_object_id'] = related_object.pk
# now you should be able to serialize object
request.session['data'] = data
然后在下一个视图中,可以使用对象的id从数据库中获取对象

data = request.session.pop('data', {})
related_object_id = data.pop('related_object_id', None)
if related_object_id:
    try:
        data['related_object'] = RelatedObject.objects.get(pk=related_object_id)
    except RelatedObject.DoesNotExist:
        pass

您可以将清理数据中的实例(例如
'relatated\u obj':
)替换为其主键(例如
'related\u object\u id:15
)。然后在下一个视图中再次获取对象。如果您需要一个更通用的解决方案,您可以使用来自的
FormWizard
,或者至少从中寻找灵感。嗨,阿拉斯代尔-您是否可以进一步介绍您在回答中提到的解决方案?我不确定我是否完全听从你的建议。谢谢