2011-05-30 76 views
24

我試圖用基於類的UpdateView更新Django用戶模型,該模型會自動與當前用戶呈現,但得到的是需要pk或slug的錯誤。表單工作並使用適當的當前用戶上下文呈現,但在嘗試提交更改時拋出錯誤。下面是我使用的觀點:我需要重寫的更新視圖的get_object()方法,並不需要覆蓋form_valid在基於類的UpdateView中更新Django中的用戶模型

class UserUpdateView(UpdateView): 
    form_class = UserForm 
    model = User 
    template_name = 'members/user_update.html' 

    def get(self, request, **kwargs): 
     self.object = User.objects.get(username=self.request.user) 
     form_class = self.get_form_class() 
     form = self.get_form(form_class) 
     context = self.get_context_data(object=self.object, form=form) 
     return self.render_to_response(context) 

    def form_valid(self, form): 
     self.object = form.save(commit=False) 
     self.object.user = self.request.user 
     self.object.save() 
     return HttpResponseRedirect(self.get_success_url()) 

回答

26

。自定義get_object()方法是:

def get_object(self, queryset=None): 
     return self.request.user 
+1

其實self.request.user是一個用戶實例。 – nemith 2012-01-29 05:53:55

4

我知道這是一個老的文章,但東西脫穎而出,我和這個評論是針對新人的信息。

get調用的self.object將工作,但它不符合實際的字段,以獲取用戶名,因爲它是供用戶實例:

self.object = User.objects.get(username=self.request.user) 

您應與該實例的用戶名參數參數username:

self.object = User.objects.get(username=self.request.user.username) 

更妙的是,使用PK(ID):

self.object = User.objects.get(pk=self.request.user.pk) 

這可能是一個更好的方法,所以我願意提供建議。

相關問題