ValueError at /accounts/register.无法创建用户,因为数据未验证。(姜戈模型形式)



我不明白为什么会出现这个错误。这是我的简单用户模型:

from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class User(AbstractUser):
pass

My Model Form:

class RegistrationForm(forms.ModelForm):
password1 = forms.CharField(label='Password', widget=forms.PasswordInput)
password2 = forms.CharField(label='Cofirm Password', widget=forms.PasswordInput)
class Meta:
model = User
fields = ('username', 'email')
def clean_password(self):
password1 = self.cleaned_data.get("password1")
password2 = self.cleaned_data.get("password2")
if password1 and password2 and password1 != password2:
return False
return True
def save(self, commit=True):
user = super().save(commit=False)
user.set_password(self.cleaned_data["password1"])
if commit:
user.save()
return user

和我的视图,我调用form.save()方法:

class Register(View):
template = 'application/register.html'
success_url = 'application:index'
def get(self, request):
ctx = {
'form': RegistrationForm(),
}
return render(request, self.template, ctx)
def post(self, request):
form = RegistrationForm(request.POST)
instance = form.save(commit=False)
if not form.is_valid():
ctx = {
'form': RegistrationForm(),
}
return render(request, self.template, ctx)
instance.save()
login(request, instance)
return redirect(self.success_url)

有没有人能帮我理解我在这里做错了什么??

谢谢

不能在.is_valid()之前运行instance = form.save(commit=False)

先验证表单再验证创建User实例。我已经为您创建了一个路由,以便在表单未验证时返回错误。

def post(self, request):
form = RegistrationForm(request.POST)
if form.is_valid():
instance = form.save()
login(request, instance)
return redirect(self.success_url)
ctx = {
'form': form,
}
return render(request, self.template, ctx)

但是要确保在模板中呈现错误。一个这样的例子是:

{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endif %}

最新更新