Django delete () не работает внутри form_valid - PullRequest
0 голосов
/ 14 января 2020

Я пытался удалить запись изнутри Django UpdateView

def form_valid(self, form):
  journal_id  =   form.instance.id
  IncomeJournal.objects.filter(pk=journal_id).delete()

Я пытался использовать как objects.filter, так и objects.get, оба не работали. Когда я пытаюсь напечатать print(IncomeJournal.objects.get(pk=journal_id)), я получаю набор запросов.

class IncomeJournalPostView(UpdateView, LoginRequiredMixin):
    model                   =       IncomeJournal
    form_class              =       IncomeJournalForm
    template_name           =       'finance/post_journal.html'    

    def get_success_url(self):
        return reverse('finance:income-list')    

    def form_valid(self, form):
        try:
            posted_income                       =   PostedIncome()
            if form.instance.income_category is not None:
                posted_income.category          =   form.instance.income_category
            if form.instance.property_id is not None:            
                posted_income.property_id       =   form.instance.property_id
            if form.instance.room_id is not None:        
                posted_income.room_id           =   form.instance.room_id
            if form.instance.tenancy_id is not None:        
                posted_income.tenancy_id        =   form.instance.tenancy_id
            if form.instance.ref is not None:
                posted_income.ref               =   form.instance.ref
            if form.instance.notes is not None:
                posted_income.notes             =   form.instance.notes            
            posted_income.amount                =   form.instance.amount            
            posted_income.status                =   'POSTED'
            posted_income.posted_by             =   self.request.user
            posted_income.save()

            try:
                journal_id                      =   form.instance.id
                IncomeJournal.objects.filter(pk=journal_id).delete()

            except Exception as e:
                print (e)

        except Exception as e:
            print (e)

        return super().form_valid(form)

1 Ответ

0 голосов
/ 15 января 2020

Этот код исправил проблему, я использовал return HttpResponseRedirect((reverse('finance:income-list'))) после удаления записи.

def form_valid(self, form):
        if 'post_document' in self.request.POST:
            try:
                posted_income                       =   PostedIncome()
                if form.instance.income_category is not None:
                    posted_income.category          =   form.instance.income_category
                if form.instance.property_id is not None:            
                    posted_income.property_id       =   form.instance.property_id
                if form.instance.room_id is not None:        
                    posted_income.room_id           =   form.instance.room_id
                if form.instance.tenancy_id is not None:        
                    posted_income.tenancy_id        =   form.instance.tenancy_id
                if form.instance.ref is not None:
                    posted_income.ref               =   form.instance.ref
                if form.instance.notes is not None:
                    posted_income.notes             =   form.instance.notes            
                posted_income.amount                =   form.instance.amount            
                posted_income.status                =   'POSTED'
                posted_income.posted_by             =   self.request.user
                posted_income.save()            
                journal_id                      =   form.instance.id
                try:    
                    IncomeJournal.objects.get(pk=journal_id).delete()
                    return HttpResponseRedirect((reverse('finance:income-list')))
                except Exception as e:
                    print (e)

            except Exception as e:
                print (e)
        return super().form_valid(form)
...