0

我想做以下事情: - 允许站点用户在表单中编辑他们的电子邮件地址。- 如果他们的电子邮件已经存在于数据库中,只要他们输入的电子邮件属于自己以外的其他人,他们就会看到错误。因此,如果 A 人发送电子邮件 test@yahoo.com 而 B 人已经拥有该电子邮件 - 就会出现错误。如果 A 人发送电子邮件 test@yahoo.com 并且这与她一直使用的电子邮件相同,则没有错误。

如何使用 Django 做到这一点?

我有以下代码:

class UserEditForm(forms.ModelForm):

    class Meta:
        model = User
        fields = ('first_name', 'email', 'last_name', )

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

        if email == self.email:
            return email

        try:
            DjangoUser.objects.get(email=email)
            raise ValidationError('Email is already taken.')
        except DjangoUser.DoesNotExist:
            pass

        return email

    email = forms.EmailField(required=True)

问题是 self.email 没有给我这个人当前的电子邮件。:(

4

1 回答 1

0

您想要的是当前用户(存储在 中request),更准确地说是他/她的电子邮件。

所以我建议的解决方法是在表单中传递或设置request// 。e-mailuser

创建表单后通过以下方式设置user的示例:formview

# views.py
def someview(request):
    if request.method == 'POST':
        user_edit_form = UserEditForm(request.POST)
        user_edit_form.actual_user = request.user
        if user_edit_form.is_valid():
            do_some_stuff()

如果您使用基于类的视图,该方法几乎相同。这样,在您的表格中,您可以检查:

self.actual_user.email == self.cleaned_data['email']

当然,如果您不需要整个用户,您可以只设置用户的电子邮件。

于 2013-02-26T16:03:32.860 回答