0

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

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

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

因此,使用下面的代码,我遇到的问题是: type object 'User' has no attribute 'email'

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

表格.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
4

1 回答 1

0

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

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-27T00:08:00.897 回答