[英]Django editing profile
我要执行以下操作:-允许站点用户以表格形式编辑其电子邮件地址。 -如果他们的电子邮件已经存在于数据库中,则只要输入的电子邮件属于自己以外的其他人,他们就会看到错误。 因此,如果人A放置了电子邮件test@yahoo.com,而人B已经拥有了该电子邮件,则存在错误。 如果人A放置了电子邮件test@yahoo.com,并且与她一直在使用相同的电子邮件,则没有错误。
如何使用Django执行此操作?
我有以下代码:
class UserEditForm(forms.ModelForm):
class Meta:
model = User
fields = ('first_name', 'email', 'last_name', )
def clean_email(self):
email = self.cleaned_data['email']
if email == self.email:
return email
try:
DjangoUser.objects.get(email=email)
raise ValidationError('Email is already taken.')
except DjangoUser.DoesNotExist:
pass
return email
email = forms.EmailField(required=True)
问题是self.email没有给我该人的当前电子邮件。 :(
您想要的是当前用户(存储在request
),更确切地说是他/她的电子邮件。
因此,我建议作为一种解决方法是在表单中传递或设置request
/ e-mail
/ user
。
设定的一个例子user
在您的form
通过所述view
创建表格后:
# views.py
def someview(request):
if request.method == 'POST':
user_edit_form = UserEditForm(request.POST)
user_edit_form.actual_user = request.user
if user_edit_form.is_valid():
do_some_stuff()
如果使用基于类的视图,则方法几乎相同。 这样,您可以在表格中通过以下方式进行检查:
self.actual_user.email == self.cleaned_data['email']
当然,如果您不需要整个用户,则只能设置该用户的电子邮件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.