python - 将表单数据传递给视图
问题描述
我有以下看法:
视图.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')
....
我想获取数据form
并将其传递给下一个视图,并将data
变量设置为等于它。这以前是有效的,但是一旦我在这个表单中添加了一个外键,会话就不再工作了,因为它是不可序列化的。我在这里采取什么方法最安全?
视图.py
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
推荐阅读
- ocaml - OCaml - 有人可以解释这个“模式匹配并不详尽”
- awk - 使用awk如何在满足条件时打印选择性列
- ios - 获取有关当前正在播放音频的应用程序的信息,iOS
- python-3.x - python中的垂直居中对齐输出
- git - 如果没有 --global 本地存储库,git config insteadOf 不起作用
- elasticsearch - 转换 beta 特性和嵌套聚合 elasticsearch
- javascript - 如果满足条件,您可以清除 setInterval 吗?不使用 componentDidMount?
- python - 无法删除根节点并使用最大堆
- mouse - Microsoft Intellimouse PS/2 数据包格式是所有带有滚轮或额外按钮的 PS/2 鼠标的标准吗?
- r - 使用 lubridate 更改 tibble 中的 tz