По умолчанию действие updateview в форме django под сообщением def - PullRequest
0 голосов
/ 20 декабря 2018

Работа с другим кодером над проектом.Его изменение остановило UpdateView в некоторых формах от сохранения изменений.Я понял, почему .... он определил

def post

, который работает для случая, над которым он работал, но нуждается в другом действии, которое просто выполняет обновление по умолчанию.Я не уверен, как это сделать, когда он 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) 

Я знаю, что мне нужен ещена это утверждение в посте:

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

Я просто не уверен, что просто делать обычное дело 'в UpdateView.Я проверил свою гипотезу о том, что его код лишил возможности редактировать и сохранять провайдера, потому что я полностью удалил сообщение def, и все работало хорошо с автоматикой UpdateView.Так как мы переопределяем?* def post мне кажется, что мы должны сами справиться с регулярным обновлением, просто не знаю, как это выглядит.

...