在Model.full_clean中,为什么在clean之前调用clean_fields?

zVi*_*tor 2 django django-models

是否有一个原因,在Model.full_cleanclean_fields之前被调用clean?在我的项目中,如果我可以先验证然后验证clean_fields内容会更合理,例如在这种情况下:

class MyModel(models.Model):
    status = models.IntegerField(blank=False, null=False)

    def clean(self):
        if not self.status:
            self.status = 0
Run Code Online (Sandbox Code Playgroud)

改变这种排序会有什么问题full_clean吗?

Chr*_*att 6

为什么它会"更合理"?正如它的名称所描述的那样,clean_fields旨在单独清理每个字段,而目的clean只是验证字段交互.例如,只有在设置了另一个字段等时,一个字段才能为空.clean_fields首先调用该方法以确保您可以实际验证这些交互; 如果字段一般有错误,那么结合验证它们是没有意义的.

  • 这不是清洁的目的.如果要提供默认值,请使用`default` kwarg,例如`status = models.IntegerField(blank = False,null = False,default = 0)` (3认同)