我正在尝试在Django上创建注册。注册期间,我无法检查电子邮件字段的唯一性。
path('accounts/register/', MyRegisterFormView.as_view(), name="register"),
class Register(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
class MyRegisterFormView(FormView):
form_class = Register
success_url = "/accounts/login/"
template_name = "registration/register.html"
def form_valid(self, form):
form.save()
return super(MyRegisterFormView, self).form_valid(form)
def form_invalid(self, form):
return super(MyRegisterFormView, self).form_invalid(form)
这怎么实现?
if User.objects.filter(email=email).exists():
messages.error(request, "Эта почта уже зарегестрированна")
我知道您需要将电子邮件与过滤器进行比较,如果匹配,则返回错误,但是我无法实现。如何访问视图中的电子邮件表单字段?
答案 0 :(得分:0)
有两种处理方法。
如果每个用户需要使用唯一的电子邮件,则可以在用户模型的电子邮件字段中添加unique=True
更加容易。该验证将自动应用于您使用的表单。
您可以通过向注册表单中添加clean_email
方法来添加字段验证(see Django docs here),
class Register(UserCreationForm):
email = forms.EmailField(required=True)
def clean_email(self):
email = self.cleaned_data.get('email', '')
if User.objects.filter(email=email).exists():
messages.error(request, "Эта почта уже зарегестрированна")
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']