Django:model_instance.clean()是否在基本验证器之前运行?

时间:2010-01-26 20:14:55

标签: django django-models django-validation

假设我有一个模特:

class Ticket(models.Model):
    client = models.ForeignKey(Client)
    color = models.CharField(max_length=255)

    def clean(self):
        self.color = self.client.favorite_color

当我在最新的Django(15分钟前的SVN的负责人)上运行时,如果我在没有选择client的情况下点击保存,我的清理方法内部会出现DoesNotExist错误(对于self.client.favorite_color部分)。由于模型需要client属性,因此在clean()中进行自定义验证之前,是否应该处理此问题?

以下是我正在阅读的文档:http://docs.djangoproject.com/en/dev/ref/models/instances/#id1

2 个答案:

答案 0 :(得分:1)

如果有人遇到这个问题,我想出来了:

在模型的full_clean()中,首先运行clean_fields(),但不会出现显示错误等。相反,它们只是添加到dict()然后是clean(),这是自定义验证方法运行您的模型以将任何自定义错误添加到dict。只有在那之后才会再次出现错误。

答案 1 :(得分:-3)

clean()是一个可以调用的ModelForms,而不是模型。

See the docs.

在模型级别执行您似乎想要做的事情,override the save() method.

评论后编辑:好吧,现在是时候用1.2即将重新阅读文档了。 :-)感谢您指出。