Запуск другого метода в представлении после сохранения формы с помощью CBVs - DJANGO

Я пытаюсь запустить другой метод после сохранения формы:

Метод inc_rec получает поле id, созданное в представлении на основе класса после сохранения

  • После сохранения формы: Я хочу получить все записи в таблице Checklist
  • .
  • Итерация по каждой из строк и добавление записей в таблицу All_Inspection с обновлением идентификатора компании.

Я немного застрял - так как я пробовал использовать сигналы, и я пробовал переопределять, но где-то есть пробел.

Помощь приветствуется - заранее спасибо.

class ParishCreateView(LoginRequiredMixin, CreateView):
    model = Company
    fields = ['str_Company_Name', 'str_City','str_post_code']
    #success_url = '/'

    def form_valid(self, form):
        print('form_valid')
        form.instance.author = self.request.user
        return super().form_valid(form)
    
    def inc_rec(self):
        Checklist = Checklist.objects.all()
        id = self.request.id
        for rec in Checklist:
            new_rec=All_Inspection(str_status=rec.str_status, str_check=rec.str_check, str_comment='',company_id=id)
            new_rec.save() 

Я ожидаю, что после сохранения формы с новым созданным элементом в таблицу ALL_Inspection будут добавлены новые записи.

Если вы посмотрите на исходный код CreateView и пройдете несколько шагов, то обнаружите, что form_valid() определена в ModelFormMixin, где она сохраняет форму, а затем вызывает свой собственный родительский класс (FormMixin). Это возвращает HttpResponseRedirect с определенным success_url.

Вы можете отложить этот ответ до тех пор, пока вам не понадобится вернуться, как показано ниже:

def form_valid(self, form):
    print("form valid")
    form.instance.author = self.request.user
    response = super().form_valid(form)
    # All the logic you want to run after the form is saved
    return response

Решено - я нашел метод, который перехватывает значение состояния для предварительного сохранения parish = form.save(commit=False). Затем я могу перехватить созданный идентификатор и обрабатывать его дальше.

Вернуться на верх