更改用户的电子邮件地址

时间:2014-09-18 08:46:12

标签: django django-models django-forms

我正在构建简单的表单,允许用户更改其基本(名字和姓氏,电子邮件)数据。 我想确定:

  • 电子邮件在数据库中仍然是唯一的
  • 用户可以保持电子邮件不受影响
  • 用户可以更改他的电子邮件

我想为此使用ModelForm。我已经完成了类似的事情:

class UserDataForm(ModelForm):
    class Meta:
        model = User
        fields = ['first_name', 'last_name', 'email']

    def clean_email(self):
        cd = self.cleaned_data
        email = cd['email']
        # Not sure how to check is there is an other account which uses this email EXCEPT this particular user account

当有另一个使用相同电子邮件的帐户时,我需要显示验证错误消息,并且此帐户不归填写表单的用户所有。

我不知道如何实现这一点。

1 个答案:

答案 0 :(得分:2)

试试这个:

class UserDataForm(ModelForm):
    class Meta:
        model = User
        fields = ['first_name', 'last_name', 'email']

    def clean_email(self):
        cd = self.cleaned_data
        email = cd['email']

        # object is exists and email is not modified, so don't start validation flow
        if self.instance.pk is not None and self.instance.email == email:
            return cd

        # check email is unique or not
        if User.objects.filter(email=value).exists():
            raise forms.ValidationError("Email address {} already exists!".format(value))
        return cd

看看这个question,我认为这会有所帮助。

另一种尝试以干净方法检查电子邮件的方式:

def clean(self):
    cleaned_data = self.cleaned_data

    if 'email' in self.changed_data and User.objects.filter(email=value).exists():
        raise forms.ValidationError("Email address {} already exists!".format(value))

return cleaned_data