首页 > 解决方案 > 在 def 帖子下以 django 形式默认更新视图操作

问题描述

与项目中的另一个编码员一起工作。他的更改阻止了UpdateView某些表单上的保存编辑。我意识到为什么....他定义了一个

def post

这适用于他正在处理的案例,但需要一个仅执行默认更新的 else 操作。当他没有自动完成所有操作时,我不确定该怎么UpdateView做。

的代码UpdateView

class ProviderUpdateView(UpdateView):                                                                                             
  model = Provider                                                                                                                
  form_class = ProviderForm                                                                                                       
  provider_form_class = ProviderForm                                                                                                       
  provider_term_form_class = ProviderTermForm                                                                                                       
  template_name = 'ipaswdb/provider/provider_form.html'                                                                           
  success_url = '/ipaswdb/provider/'                                                                                               

  def get_context_data(self, **kwargs):
    context = super(ProviderUpdateView, self).get_context_data(**kwargs)

    provider = context['object'] 
    context['provider_id'] = provider.id
    prov = Provider.objects.get(pk=provider.id)

    #print "provider: ",
    #print prov
    #print "provider terminated: ",
    #print prov.is_terminated

    if prov.is_terminated:
      provider_form = ProviderFormView(instance=prov)
      context['readonly'] = True 
    else:
      print("NOT TERMINATED SO LETS DO THIS")
      provider_form = ProviderForm(instance=prov)
      context['readonly'] = False 

    context['provider_form'] = provider_form 

    provider_term_form = ProviderTermForm()
    context['provider_term_form'] = provider_term_form 

    ### Get the list of GroupLocations, but remove the current one this provider is associated with
    ### I just need the grouplocation id and the name
    #grplocs = GroupLocationProvider.objects.filter(

    return context


  def post(self, request, *args, **kwargs):
    #print self.request.POST.keys()
    #print self.request.POST.values()
    print("Posting...")
    if self.request.POST.has_key('terminate'):
      provider = Provider.objects.get(pk=kwargs['pk'])
      form = ProviderTermForm(request.POST)
      if form.is_valid():
        print "Terminating Provider: ",
        print provider

        provider_term = ProviderTerm()

        provider.is_terminated = True
        provider.save()

        ### Update the term fields
        provider_term.provider = provider
        provider_term.old_id = provider.id
        provider_term.term_date = form.cleaned_data['term_date']
        provider_term.term_comment = form.cleaned_data['term_comment']
        provider_term.save()

    return HttpResponseRedirect(self.success_url) 

我知道我需要在帖子中对这个声明做一个 else :

if self.request.POST.has_key('terminate'):

我只是不确定在UpdateView. 我测试了我的假设,即他的代码破坏了编辑和保存提供程序的能力,因为我完全删除了 def 帖子,并且所有这些都与UpdateViewautomagic 配合得很好。既然我们是压倒一切的?在def post我看来,我们必须自己处理定期更新,只是不确定看起来如何。

标签: djangodjango-formsdjango-crispy-forms

解决方案


推荐阅读