如何使 Django 表单字段唯一?

Jay*_*ngh 4 django django-forms unique-constraint python-3.x

我有一个注册表单,我想在其中使电子邮件和手机号码字段的数据唯一....

class SignUpForm(UserCreationForm):
    email = forms.EmailField(max_length=254, help_text='Required. Inform a valid email address.', unique=True)
    mobile_no = forms.CharField(validators=[max_length=17, initial='+91', unique=True)  
Run Code Online (Sandbox Code Playgroud)

我目前正在使用,unique=True但它引发错误...

TypeError: __init__() got an unexpected keyword argument 'unique'
Run Code Online (Sandbox Code Playgroud)

Vai*_*hal 8

最简单和最快的方法(对您和服务器而言)是通过在您的模型中设置unique=True.
如果你想要它的形式,你需要覆盖干净

清洁邮箱:

class SignUpForm(UserCreationForm):
    ...

    def clean_email(self):
        email = self.cleaned_data['email']
        if User.objects.filter(email=email).exists():
            raise ValidationError("Email already exists")
        return email
Run Code Online (Sandbox Code Playgroud)

form.is_valid()如果具有给定电子邮件的用户帐户已经存在,现在将抛出错误。
我想你现在可以弄清楚如何为手机号码做同样的事情。

  • 这不适用于更改表单,因为它可能已经存在(例如,在未更改的情况下),因此会抛出错误。 (5认同)