Использование валидации Form.has_changed() с Django UpdateView

Я пытаюсь опубликовать сообщение, когда одно или несколько значений изменились в UpdateView. Возможно ли это сделать с помощью Form.has_changed() с этим общим представлением? Например:

class MyUpdateView(UpdateView):
    model = MyModel
    form = MyModelForm
    fields = "__all__"
    template_name = "mymodel_form.html"

    if form.has_changed():
        logger.info("Some values have changed")

Вы можете переопределить метод .form_valid(…) [Django-doc] для этого:

class MyUpdateView(UpdateView):
    model = MyModel
    form_class = MyModelForm
    fields = '__all__'
    template_name = 'mymodel_form.html'

    def form_valid(self, form):
        if form.has_changed():
            logger.info('Some values have changed')
        return super().form_valid(form)

или если вы хотите регистрировать изменения, если форма также может быть недействительной, вы можете использовать .get_form(…) [Django-doc]:

class MyUpdateView(UpdateView):
    model = MyModel
    form_class = MyModelForm
    fields = '__all__'
    template_name = 'mymodel_form.html'

    def get_form(self, form_class=None):
        form = super().get_form(form_class=form_class)
        if form.has_changed():
            logger.info('Some values have changed')
        return form
Вернуться на верх