[英]Forms hierarchy issue in Django
我创建了一个登录表单,如下所示:
class LoginForm(AuthenticationForm):
username = forms.CharField (label=_("Usuario"), max_length=30,
widget=forms.widgets.
TextInput(attrs={'id':'username','maxlength':'25'}))
password = forms.CharField (label=_("Password"), widget=forms.widgets.
PasswordInput(attrs={'id':'password','maxlength':'10'}))
我在此视图中使用它:
def login(request):
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
...
调试后,我意识到form.is_valid()方法返回false,因为is_bound attr为false。 我需要重新定义表单中的内容还是修改视图???
编辑1
我一直关注关于is_valid()方法返回False的问题: form.is_valid()总是返回false
但是问题仍然存在。
关于当前接受的答案要注意的一个问题:
form = LoginForm(request=request, data=request.POST)
是传递请求似乎使Django能够在启动会话之前检查测试cookie是否成功的行为。 问题是,如果您之前未设置测试Cookie(必须在先前的视图请求中设置测试Cookie),它将失败并且您的登录将失败。 我建议只像这样传递data关键字参数:
form = LoginForm(data=request.POST)
除非我错过了一些重要的事情(似乎绝对没有必要进行Cookie检查),否则在大多数情况下效果会更好。 您也可以在加载登录页面的视图中调用request.set_test_cookie(),但这并不涵盖所有情况。
该问题实际上类似于您链接到的问题中的问题。 您要继承的表单django.contrib.auth.forms.AuthenticationForm
将request
作为其第一个参数,在通常的data
参数之前。 这就是您的表单报告其未绑定的原因-就其而言,您没有传递任何数据,因此没有任何绑定内容。
因此,在您看来,您需要像这样实例化它:
form = LoginForm(request=request, data=request.POST)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.