Django,更新个人资料,排除当前用户电子邮件

时间:2014-04-26 00:55:07

标签: python django forms emailfield

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

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

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

因此,使用下面的代码,我得到的问题是: 类型对象'用户'没有属性'电子邮件'

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

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

1 个答案:

答案 0 :(得分:0)

我认为在行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&gt; 1.6)将是创建自定义用户模型,并设置电子邮件字段属性unique=True