2013-02-26 70 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'] 

當然你可以設置只有用戶的電子郵件,如果你不需要整個用戶。