当我保存表单时,我执行模型中定义的数据验证
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)
答案 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