我有一个具有以下函数的context_processor.py文件
def include_user_create(request):
if 'form' not in request.session:
form = CreateUserForm()
else:
form = request.session['form']
return { 'create_user_form' : form } 我使用它来在我的base.html模板中显示我的寄存器,这样我就可以在所有页面上重用它。函数create_user处理表单提交
def create_user(request):
form = CreateUserForm(request.POST or None, request.FILES or None)
if request.method == 'POST':
if form.is_valid():
user = form.save(commit=False)
user.save()
user = authenticate(username=user.email, password=user.password)
else:
request.session['form'] = form #<--- save
next = request.POST.get('next', '/')
return HttpResponseRedirect(next)如果表单无效,我想保存表单,以便context_processor可以重用表单,以便保存错误,以便将它们显示在模板中。
这样做会给我一个错误:
TypeError: <CreateUserForm bound=True, valid=False, fields=(email;password;confirm_password)> is not JSON serializable有可能让这件事起作用吗?
发布于 2017-03-09 09:17:02
您有此错误,因为表单对象不是JSON可序列化的,而且默认的会话序列化程序是serializers.JSONSerializer。
尝试将其更改为settings.py中的泡菜序列化程序。
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'编辑:
使用此设置,您不必关心泡菜序列化,只需编写:
request.session['form'] = formhttps://stackoverflow.com/questions/42685867
复制相似问题