如何在更新时从模型触发清理方法?

时间:2017-11-17 12:02:46

标签: django django-models

当我保存表单时,我执行模型中定义的数据验证

    def clean(self):
    model = self.__class__
    if self.unit and (self.is_active == True)  and model.objects.filter(unit=self.unit, is_terminated = False , is_active = True).exclude(id=self.id).count() > 0:
        raise ValidationError('Unit has active lease already, Terminate existing one prior to creation of new one or create a not active lease '.format(self.unit))

如何在简单更新期间触发相同的清理方法,而无需在更新视图中复制干净逻辑?(在我看来,我只是在没有任何形式的情况下执行更新)

Unit.objects.filter(pk=term.id).update(is_active=False)

1 个答案:

答案 0 :(得分:1)

update请勿调用模型的save方法,因此在这种情况下,django无法提出ValidationError例外。

在进行更新之前,您至少需要调用模型的full_clean方法。

也许是这样的?

unit = Unit.objects.get(pk=term.id)
unit.is_active = False    

try:
    unit.full_clean()
except ValidationError as e:
    # Handle the exceptions here

unit.save()

参考:https://docs.djangoproject.com/en/1.11/ref/models/instances/#validating-objects