我正在使用django的UserCreationForm来注册用户。除错误外,它的工作正常。我不能让他们渲染。我不认为模板有任何问题,因为我用最基本的模板和使用form.as_p和form.as_table进行了尝试,但注册仍然相同,但如果您在其中放入2个不同的密码只需使用空表单刷新屏幕,没有错误。此外,我尝试通过django消息发送form.errors,并在有一个时传递正确的错误,但这个解决方案对我来说不实用。
由于缩进,它不会让我发布模板。我在用 {{form.non_field_errors}}位于表单顶部,然后{{form.email.error}}等。
如果可以,请提供帮助:)
表格类..
class MyRegistrationForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields=('username', 'email', 'password1', 'password2')
def save(self, commit=True):
User= super(MyRegistrationForm, self).save(commit=False)
User.email = self.cleaned_data["email"]
if commit:
User.save()
return User
查看方法......
def home(request):
args = {}
args.update(csrf(request))
if request.method =='POST':
form = MyRegistrationForm(request.POST)
if form.is_valid():
##save_it = form.save(commit=False)
form.save()
messages.success(request, 'Thank you for joining!')
#return HttpResponseRedirect('thank-you')
return render_to_response('thankyou.html', locals(), context_instance=RequestContext(request))
else:
args['form'] = MyRegistrationForm()
return render_to_response('signup.html', args, context_instance=RequestContext(request))
args={}
args.update(csrf(request))
args['form'] = MyRegistrationForm()
context = RequestContext(request,
{'user': request.user})
return render_to_response('signup.html', args,
context_instance=context)
答案 0 :(得分:0)
如果表单有错误,则显式重新创建表单,在上下文中将表单替换为未绑定表单,因此没有错误。不要那样做。您的观点应该简单:
def home(request):
if request.method =='POST':
form = MyRegistrationForm(request.POST)
if form.is_valid():
form.save()
messages.success(request, 'Thank you for joining!')
return HttpResponseRedirect('thank-you')
else:
form = MyRegistrationForm()
return render(request, 'signup.html', {'form': form})
请注意其他更改:成功发布后总是重定向; render
而不是render_to_response,因为它为您创建了一个RequestContext;并且无需自己添加用户或csrf值,因为只要您使用RequestContext,它们就会由上下文处理器添加。