我有一个用Django客户用户模型为用户注册创建的表单有一个奇怪的问题。我正在运行Django 1.6.5。Django Forms cleared_data缺少某些字段
forms.py
class SignupForm(forms.ModelForm):
password1 = forms.CharField(widget=forms.PasswordInput,
label=_('Password'),
max_length=50)
password2 = forms.CharField(widget=forms.PasswordInput,
label=_('Repeat password'),
max_length=50)
class Meta:
model = RegisteredUser
fields = ("firstname", "lastname", "email", "password1", "password2",)
def clean_email(self):
existing = RegisteredUser.objects.filter(email__iexact=self.cleaned_data['email'])
if existing.exists():
raise forms.ValidationError(_('A user with that email already exists.'))
return self.cleaned_data['email']
def clean(self):
cleaned_data = super(SignupForm, self).clean()
if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data:
if self.cleaned_data['password1'] != self.cleaned_data['password2']:
raise forms.ValidationError(_('The two passwords did not match.'))
return cleaned_data
views.py
class SignUpView(FormView):
template_name = 'core/signup.html'
form_class = SignupForm
success_url = None
def post(self, request, *args, **kwargs):
form = self.get_form(self.get_form_class())
if form.is_valid():
return self.form_valid(request, form)
else:
return self.form_invalid(form)
def form_valid(self, request, form):
new_user = self.register(request, **form.cleaned_data)
success_url = self.get_success_url(request, new_user)
try:
to, args, kwargs = success_url
return redirect(to, *args, **kwargs)
except ValueError:
return redirect(success_url)
def register(self, request, **cleaned_data):
RegisteredUser.objects.create_user(email=cleaned_data['username'],
firstname=cleaned_data['firstname'],
lastname=cleaned_data['lastname'],
password=cleaned_data['password2'])
形式返回无效的话说, '密码1' 和 '密码2' 是必填字段。该值与其他字段一起显示在发布数据中。
无论我尝试过什么,'password1'和'password2'都不包含在cleaned_data字典中。我已经尝试在这两个字段中使用各种其他名称,只是为了确保'password2'与其他任何内容没有冲突。
我可能忽视的东西非常简单:-)
谢谢!
迈克
编辑1 - 使用的模板(抱歉DIV-地狱!):
<section class="container">
<div class="row">
<div class="col-md-6 col-sm-6">
<h2>Create an <strong>Account</strong></h2>
<form class="white-row" method="post" action="#">
{% csrf_token %}
<div class="row">
<div class="form-group">
<div class="col-md-12 col-sm-12">
<label>Firstname</label>
<input type="text" class="form-control" name="firstname">
</div>
</div>
</div>
<div class="row">
<div class="form-group">
<div class="col-md-12 col-sm-12">
<label>Lastname</label>
<input type="text" class="form-control" name="lastname">
</div>
</div>
</div>
<div class="row">
<div class="form-group">
<div class="col-md-12 col-sm-12">
<label>Email</label>
<input type="email" class="form-control" name="email">
</div>
</div>
</div>
<div class="row">
<div class="form-group">
<div class="col-md-6 col-sm-6">
<label>Password</label>
<input type="password" class="form-control" name="passsword1">
</div>
<div class="col-md-6 col-sm-6">
<label>Repeat password</label>
<input type="password" class="form-control" name="passsword2">
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 col-sm-12">
<input type="submit" value="Sign up" class="btn btn-primary pull-right push-bottom" data-loading-text="Loading...">
</div>
</div>
</form>
</div>
能告诉你检查精确字段错误的模板?您在使用表格的地方,因为它抱怨说您没有填写好表格,并且您在模板中执行此操作 – AlvaroAV
我更新了模板。我得到的错误是password1和password2是必需的。这两个字段都是外地字段,并且(如提及的)出现在请求对象中的发布数据中。 – MikeSDNielsen
我想你对django表单有个误解,你在哪里使用'{{form}}'变量?你在哪里调用'{{form.password1}}和'{{form.password2}}'?您正在使用标准输入,html输入' AlvaroAV