我有一个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
是否有可能以某种方式使其工作?
答案 0 :(得分:1)
您遇到此错误,因为表单对象不是JSON可序列化的,默认会话序列化程序是serializers.JSONSerializer
。
尝试将其更改为settings.py
中的pickle序列化程序:
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
修改强>
使用此设置,您不必关心pickle序列化,您只需编写:
request.session['form'] = form