如何使Django表单字段唯一?

时间:2018-10-04 05:49:55

标签: django python-3.x django-forms unique-constraint

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

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)  

我当前正在使用unique=True,但它会引发错误,因为...

TypeError: __init__() got an unexpected keyword argument 'unique'

1 个答案:

答案 0 :(得分:1)

最简单,最快的方法(对您和服务器而言)都是通过设置unique=True在模型中实现。
无论如何,如果您想要它的形式,则需要覆盖clean

清洁电子邮件:

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

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