【问题标题】:Django, unique email, error on update profileDjango,唯一电子邮件,更新配置文件错误
【发布时间】:2014-04-29 11:37:03
【问题描述】:

在我的应用程序中,我遇到了以下问题。在注册期间,电子邮件地址必须使用自定义 *clean_edit* 方法是唯一的。所以在 update_profile 表单中,我使用相同的函数(*clean_edit*)来检查输入的电子邮件地址是否唯一。如果用户没有更改他的电子邮件地址(并且只更改他的名字),那么他会收到一条错误消息,显示“此电子邮件已被其他用户使用”。发生这种情况是因为在更新配置文件表单中,电子邮件地址的占位符具有当前用户的电子邮件地址。所以当点击提交时,该应用程序也尝试更新他的电子邮件地址,但返回电子邮件已被使用的错误。您可以在下面找到 UpdateProfile 类的 clean_email。

def clean_email(self):
    username = self.cleaned_data.get('username')
    email = self.cleaned_data.get('email')
    if User.objects.filter(email=email).exclude(username=username).exclude(email=email).count():
            raise forms.ValidationError('This email address is already in use. '
                                        'Please supply a different email address.')
    return email

【问题讨论】:

    标签: django email unique edit profile


    【解决方案1】:

    我在这里没有看到问题,但我确实看到此代码存在问题。您无法访问 clean_foo 方法中的其他字段,因为它们可能尚不可用。如果您要在验证期间使用多个字段(就像您在此处所做的那样),请改用 clean 方法。

    但是,您似乎不需要用户名。我会推荐这个检查:

    if User.objects.filter(email__iexact=email).count() > 0:
            raise forms.ValidationError('This email address is already in use. '
                                        'Please supply a different email address.')
    

    email__iexact 是不区分大小写的比较。

    【讨论】:

    • 问题是我从教程中得到了这段代码。它应该检查该电子邮件地址是否未被其他成员使用。因此,由于我是 Django 和 python 的新手,我不完全明白为什么它使用 excludes。就我而言,我只想检查电子邮件地址是否未被其他成员使用,但可以由登录用户使用。关于这个有什么想法吗?
    • 使用此代码,如果我处理表单(不更改电子邮件地址),我会收到此电子邮件地址已在使用中的错误。是不是有点奇怪?
    猜你喜欢
    • 2022-01-04
    • 2014-06-11
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    相关资源
    最近更新 更多