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
1 个回答
0
我想在这一行 current_user_email = User.email
中,“User”其实并不是一个真实的用户实例,而是你导入的一个模型类,用来在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
。