Django 键入对象';模型形式';没有属性';验证错误';

Django 键入对象';模型形式';没有属性';验证错误';,django,django-forms,Django,Django Forms,我正在尝试创建一个注册表(使用Django ModelForm),在这里我想验证“密码”和确认密码是否匹配。我尝试使用raise ValidationError,但出现了一个错误 类型对象“ModelForm”没有属性“ValidationError” 验证密码的正确方法应该是什么?下面是我的代码: models.py: from django.db import models class Students(models.Model): firstName = models.CharF

我正在尝试创建一个注册表(使用Django ModelForm),在这里我想验证“密码”和确认密码是否匹配。我尝试使用raise ValidationError,但出现了一个错误

类型对象“ModelForm”没有属性“ValidationError”

验证密码的正确方法应该是什么?下面是我的代码:

models.py:

from django.db import models

class Students(models.Model):
    firstName = models.CharField(max_length=120)
    lastName = models.CharField(max_length=120)
    # studentID = models.IntegerField(null=False)
    email = models.EmailField()
    password = models.CharField(max_length=120, default="")
    password2 = models.CharField(max_length=120, default="")
    street = models.CharField(max_length=120)
    apt = models.IntegerField(blank=True, null=True)
    city = models.CharField(max_length=120)
    state = models.CharField(max_length=120)
    zipcode = models.IntegerField(null=False)

    def __str__(self):
        return self.firstName

    class Meta:
        verbose_name_plural = "Students"
forms.py:

from django.forms import ModelForm
from django.utils.translation import gettext_lazy as _

from .models import Students


class StudentRegisterForm(ModelForm):
    class Meta:
        model = Students
        fields = [
            'firstName', 'lastName',
            'email', 'password', 'password2',
            'street', 'apt', 'city', 'state', 'zipcode',
        ]
        labels = {
            'firstName': _('First Name'),
            'lastName': _('Last Name'),
            'password2': _('Confirm Password'),
            'Apt': _('Apt/House'),
            'zipcode': _('Zip Code'),
        }


    def clean(self):
        data = self.cleaned_data
        password = self.cleaned_data.get('password')
        print(password)
        password2 = self.cleaned_data.get('password2')
        if password2 != password:
            raise ModelForm.ValidationError("Passwords must match!")
        return data
Views.py:

from django.http import HttpResponseRedirect
from django.shortcuts import render


from .models import Students
from .forms import StudentRegisterForm


def student_register(request):
    register_form = StudentRegisterForm(request.POST or None)
    context = {
        "title": "Welcome to the registration page",
        "register_form": register_form
    }
    if register_form.is_valid():
        register_form.save()


    return render(request, 'students/register.html', context)

我对编程相当陌生,所以请尝试解释我哪里出了问题,正确的方法是什么。谢谢

ValidationError不是ModelForm的属性

from django.forms import ModelForm, ValidationError

....

raise ValidationError("Passwords must match!")
或者更好:

from django import forms

class StudentRegisterForm(forms.ModelForm):

    ...

    raise forms.ValidationError("Passwords must match!")

ValidationError不是ModelForm的属性

from django.forms import ModelForm, ValidationError

....

raise ValidationError("Passwords must match!")
或者更好:

from django import forms

class StudentRegisterForm(forms.ModelForm):

    ...

    raise forms.ValidationError("Passwords must match!")

该错误至少是由ValidationError位于django.core.exceptions中这一事实引起的。该错误至少是由ValidationError位于django.core.exceptions中这一事实引起的。