Использование валидации 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