我想做以下事情: - 允许网站用户在表单中编辑其电子邮件地址。 - 如果他们的电子邮件已经存在于数据库中,只要他们输入的电子邮件属于他人以外的其他人,他们就会看到错误。因此,如果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没有给我这个人当前的电子邮件。 :(
答案 0 :(得分:0)
您想要的是当前用户(存储在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']
当然,如果您不需要整个用户,则只能设置用户的电子邮件。