2011-05-05 57 views
5

我試圖在Django 1.3中使用UpdateView保存表單,似乎已經遇到了問題。當我保存表單時,它的POST屬於當前的URL,成功的url是相同的url。基於類的視圖擴展UpdateView不正確保存表格

保存表單時,由於頁面上的所有字段都已更新,因此數據似乎發生了更改,但是當我刷新時,一切似乎都恢復了。

形式是模式的形式,這裏是我的觀點:

class UserProfileView(UpdateView): 
    context_object_name = 'profile' 

    def get_template_names(self): 
     return ['webapp/user_profile.html'] 

    def get_queryset(self): 
     pk = self.kwargs.get('pk', None) 

     if pk is not None: 
      user = User.objects.get(pk=pk) 
     else: 
      raise AttributeError(u"Could not locate user with pk %s" 
          % pk) 

     if user.contributor_profile.all(): 
      queryset = Contributor.objects.filter(user__pk=pk) 
     else: 
      queryset = Member.objects.filter(user__pk=pk) 

     return queryset 

    def get_object(self, queryset=None): 
     if queryset is None: 
      queryset = self.get_queryset() 

     return queryset.get() 

我沒有看到有什麼可以去錯了,看到Django的通過的UpdateView級撲救形式和混入的過程它延伸。有沒有人遇到過這個問題?

回答

9

找出解決方案。問題發生了,因爲在報告中沒有出現錯誤。這似乎發生在需要以某種方式設置隱藏字段以使表單有效。

該解決方案非常簡單。您只需要覆蓋帖子功能並解決任何隱藏字段:

def post(self, request, *args, **kwargs): 
    pk = self.kwargs.get('pk', None) 

    if pk is not None: 
     user = User.objects.get(pk=pk) 
    else: 
     raise AttributeError(u"Could not locate user with pk %s" 
          % pk) 

    if user.contributor_profile.all(): 
     contributor = Contributor.objects.get(user=user) 
     form = ContributorForm(request.POST, instance=contributor) 
    else: 
     member = Member.objects.get(user=user) 
     form = MemberForm(request.POST, instance=member) 

    if form.is_valid(): 
     self.object = form.save() 
     return HttpResponseRedirect(self.get_success_url()) 
    else: 
     return self.render_to_response(self.get_context_data(form=form))