我创建了更新个人资料页面。所以字段是:电子邮件,名字,姓氏。
在验证过程中,我尝试排除已登录用户的电子邮件地址,并且我还要过滤其他用户的电子邮件地址。我想如果你看到代码,你会明白我在说什么。
我在这里读了几个问题,但找不到东西。一些用户遇到了同样的问题。
因此,使用下面的代码,我得到的问题是: 类型对象'用户'没有属性'电子邮件' 。
我尝试了很多方法来获取当前用户的电子邮件地址(在我保存表单之前),但仍然没有。
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
答案 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
。