检查Django CBV更新中的更改字段

43T*_*cts 2 python django django-views django-class-based-views

我的模型有一个标准的CBV更新方法Announcement

models.py:

class Announcement(models.Model):
    title = models.CharField(max_length=80)
    ...
    draft = models.BooleanField(default = False)
Run Code Online (Sandbox Code Playgroud)

view.py:

class Update(UpdateView):
    model = Announcement
    form_class = AnnouncementForm
    template_name = 'announcements/form.html'

    @method_decorator(staff_member_required)
    def dispatch(self, *args, **kwargs):
        return super(Update, self).dispatch(*args, **kwargs
Run Code Online (Sandbox Code Playgroud)

使用此CBV Update,我如何检查布尔值draft字段是否已更改,如果已更改,是否可以处理?

mar*_*dev 5

您可以执行以下操作:

if 'value' in form.changed_data:
Run Code Online (Sandbox Code Playgroud)

哪里:

  • form是您的AnnouncementForm,并且已首先通过验证(form.is_valid
  • value 是字段名称

由于使用的是CBV,因此可以将逻辑放入form_valid方法中,以确保所有数据均得到正确验证(除非您有其他用例)