2013-02-26 135 views
0

我想执行以下操作: - 允许网站用户在表单中编辑其电子邮件地址。 - 如果他们的电子邮件已经存在于数据库中,只要他们放入的电子邮件属于他人以外的其他人,他们就会看到错误。因此,如果A人员将电子邮件发送至[email protected],并且B人员已经发送了该电子邮件,则会出现错误。如果A人将电子邮件发送至[email protected],并且该电子邮件与她一直使用的电子邮件相同,则没有错误。Django编辑配置文件

我该如何使用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

你想要的是当前用户(存储在request),更确切地说他/她的电子邮件。

所以,我建议作为一种解决方法是通过或设置request/e-mail/user形式

创建形式后通过viewform设置user的一个例子:

# 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'] 

当然你可以设置只有用户的电子邮件,如果你不需要整个用户。