/accounts/register 处的值错误。无法创建用户,因为数据未验证。 (django 模型形式)

ValueError at /accounts/register. The User could not be created because the data didn't validate. (django model form)

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

from django.db import models
from django.contrib.auth.models import AbstractUser

# Create your models here.
class User(AbstractUser):
    pass

我的模特表格:

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 实例。如果表单未通过验证,我已经为您创建了一条路线 return 返回错误。

 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 %}