2014-04-26 27 views
0

我創建了更新配置文件頁面。所以這些字段是:電子郵件,名字,姓氏。Django,更新配置文件,排除當前用戶電子郵件

在驗證中,我試圖排除記錄的用戶的電子郵件地址,並且我正在過濾其他用戶的電子郵件地址。我想如果你看到代碼,你會明白我在說什麼。

我在這裏讀了幾個問題,但找不到東西。一些用戶有同樣的問題。

所以用下面的代碼,我得到的問題是: 類型對象'用戶'沒有屬性'電子郵件'

我嘗試了很多方法來獲取當前用戶的電子郵件地址(在我保存表單之前),但什麼也沒有。

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 
+0

你使用的是django contrib用戶模型嗎?另外,哪一行會引發錯誤? – karthikr

+0

是的,我正在使用django用戶模型。問題是獲取當前登錄的用戶電子郵件地址。所以這是這一行:'current_user_email = User.email'。 – manosim

回答

0

我想,本着current_user_email = User.email「用戶」是不是一個真正的實際用戶實例,它是您設置的Meta進口model = User模型類。 如果你想用這種形式只能用於編輯的用戶數據,您應該做這樣的事情:

urls.py URL模式=模式(「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

相關問題