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

Django:model_instance.clean()是否在基本验证器之前运行?,django,django-models,django-validation,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头部)上运行此命令时,如果我在未选择客户端的情况下单击save,我会从

假设我有一个模型:

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头部)上运行此命令时,如果我在未选择
客户端的情况下单击save,我会从我的clean方法(对于
self.client.favorite_color
部分)中得到一个
DoesNotExist
错误。由于模型需要
客户机
属性,在
clean()
中进行自定义验证之前是否应该处理此问题

以下是我正在阅读的文档:

clean()
是可调用的模型表单,而不是模型

要在模型级别执行您似乎想要执行的操作


评论后编辑:好吧,看来是时候用1.2重新阅读文档了。:-)谢谢你指出这一点。

如果有人遇到这个问题,我就知道了:


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

您可以在模型上使用“清除”功能吗?我以为这只是模型表单?@D4V360:OP指的是SVN版本。介绍了
clean
方法。查看所有模型方法:如果要下拉SVN,请从修订版12267中拉出。在#12268和forward中,直到他们修复它(我放入了一张罚单),如果您引发ValidationError('使用这样一个已记录的字符串'),django.forms.models中会因为一个bug而发生运行时错误。12268就是这个bug被引入的地方。看看你是否对orokusaki在说什么感到好奇!clean()现在也是一种模型方法。这里有一个链接:@celopes LOL,我知道。我会抱怨,但我的项目做得太早了,我每周都会把SVN拉下来,一边解决bug,因为这个模型验证是我一直梦想的事情,还有更多的新东西,比如queryset.exists(),等等。如果你要用SVN进行这个新的验证,我会抓取修订版#12268。