【问题标题】:Django, Update Profile, exclude current user emailDjango,更新配置文件,排除当前用户电子邮件
【发布时间】:2014-06-11 21:16:17
【问题描述】:

我创建了一个更新个人资料页面。所以这些字段是:电子邮件、名字、姓氏。

在验证中,我试图排除登录用户的电子邮件地址,并且我正在过滤其他用户的电子邮件地址。我想如果你看到代码你就会明白我在说什么。

我在这里阅读了几个问题,但找不到任何东西。一些用户遇到了同样的问题。

所以使用下面的代码,我遇到的问题是: 类型对象“用户”没有属性“电子邮件”

我尝试了很多方法来获取当前用户的电子邮件地址(在我保存表单之前),但仍然没有。

forms.py

class UpdateProfile(forms.ModelForm):
    email = forms.EmailField(required=True)
    first_name = forms.CharField(required=False)
    last_name = forms.CharField(required=False)

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

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

    def save(self, commit=True):
        user = super(UpdateProfile, self).save(commit=False)

        if commit:
            user.save()

        return user

【问题讨论】:

  • 你在使用 django contrib 用户模型吗?另外,哪一行会引发错误?
  • 是的,我正在使用 django 用户模型。问题在于获取当前登录的用户电子邮件地址。所以是这一行:current_user_email = User.email.

标签: python django forms emailfield


【解决方案1】:

我想在current_user_email = User.email 行中的“用户”并不是真正的用户实例,它是一个模型类,您导入用于在 Meta 中设置 model = User。 如果您只想将此表单用于编辑用户数据,您应该这样做:

urls.py urlpatterns = patterns('project.apps.app_name.views',

    url(r'^edit-user/(?P<pk>\d+)/?$','edit_user',name='edit_user'),
)

app_name/views.py:

def edit_user(request,pk):
    user_instance =  User.objects.get(pk=pk)
    form = UpdateProfile(request.POST, instance=user_instance)
    .... more code ....

在 forms.py 中,你应该从以下位置更改行:

current_user_email = User.email

到:

current_user_email = self.instance.email

但正确的方法(如果您使用 django >1.6)是创建自定义用户模型,并设置电子邮件字段属性unique=True

【讨论】:

    猜你喜欢
    • 2014-04-29
    • 2022-01-04
    • 2011-10-02
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    相关资源
    最近更新 更多