Django,更新配置文件,排除当前用户电子邮件



我创建了一个更新配置文件页面。因此字段为:电子邮件、名字、姓氏。

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

我在这里读了几个问题,但找不到什么。一些用户也有同样的问题。

因此,使用下面的代码,我得到的问题是:类型对象"User"没有属性"email"

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

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

我假设current_user_email = User.email行中的"User"实际上不是一个实际的用户实例,它是您为在Meta中设置model = User而导入的模型类。如果你只想使用这个表单来编辑用户数据,你应该这样做:

urls.pyurl模式=模式('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

相关内容

最新更新