2011-05-05 61 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))