2011-01-25 99 views
0

類別。Django - 即使數據無效,ModelForm仍在保存

我已經定義了,就像這樣的ModelForm:

class EditUserForm(UserForm): 
    def __init__(self,data=None,instance=None): 
     UserForm.__init__(self,data=data,instance=instance) 
     del self.fields['username'] 

我這樣做是因爲我想從顯示在我的EditUserForm排除用戶名字段,而是因爲我重寫了在用戶窗體用戶名字段,在Django防止錯誤這從工作,所以我寫這樣的形式。

我的視圖代碼看起來是這樣的:

if request.method == 'POST': 
     uf = EditUserForm(request.POST,instance=user) 
     upf = StudentProfileForm(request.POST,instance=profile) 
     if uf.is_valid() and upf.is_valid(): 
      print 'VALID' 
      uf.save() 
      upf.save() 
      messages.success(request, 'You have successfully updated your profile.') 
      return HttpResponseRedirect('/student/editprofile') 
     else: 
      print 'INVALID' 

爲了測試它,我試圖改變名字,使密碼不匹配,我提出時,我注意到的無效印刷(正確地出現在密碼驗證錯誤)但在我有「歡迎(用戶的名字)(用戶姓氏)」頁面的頂部「我注意到名字已經改變。當我轉到不同的頁面時,它會回到正確的值。我如何使這不發生?

這是我的html代碼:

{% if user.is_authenticated %} 
    Welcome, <a href = "/{{user.get_profile.getType}}/profile">{{user.first_name}} {{user.last_name}}</a> | 
    <a href = "/auth/logout">Logout</a> 
{% else %} 
{% endif %} 

我的猜測,發生的事情是,當我發佈的數據,它把user.first_name在上下文覆蓋實際的user.first_name。但它不是有效的,因爲數據還沒有保存......

那麼,我怎麼能有user.first_name在多數民衆贊成被張貼在不改變它的值,直到它實際上是有效的模板?

+1

請顯示該視圖的其餘代碼。 – 2011-01-25 07:13:11

回答

0

你的假設是對的。經過驗證後,ModelForm將用給定的data更新給定實例(user),使其處於無效狀態。

,你可以:

  • 嘗試創建的user副本,
  • 重新從數據庫中user
  • 或存儲user.first_name在一個臨時變量,並將其設置回在驗證失敗

編輯:請注意,儘管ModelForm修改了實例,但它不保存它。

+0

我想我可以做的是在我的UserProfile中創建一個「display_name」字段,並使用它在模板中顯示用戶名。在UserProfile保存中,我將設置display_name = user.first_name + user.last_name – JPC 2011-01-25 18:22:33

相關問題