heunle Asked: 2025-02-08 00:24:10 +0800 CST2025-02-08 00:24:10 +0800 CST 2025-02-08 00:24:10 +0800 CST 清洁函数在模型 Django 中起什么作用?不在表格中 772 我正在阅读此解决方案,我想知道“清洁功能”有什么作用? 我们应该把检查放在哪里? 然后我找到了这张照片 在此处输入图片描述 所以我们有很多清理函数。我只想知道它们的作用,如果我们想添加一个过滤器来确保一个模型(表)中不会有超过 x 个对象,那么使用“清理”是否正确? 我认为使用“def save()”似乎更适合解决这种检查,但我不确定。 django 2 个回答 Voted Best Answer Ankush Chavan 2025-02-08T01:40:02+08:002025-02-08T01:40:02+08:00 Django 模型中的方法clean用于执行模型范围的检查(验证)。Django DB 模型还有一种方法,clean_fields该方法在每个字段上运行 clean 方法,如果有任何错误,则根据字段引发验证错误。因此,该clean_fields方法引发的错误将基于字段,例如: { "name": "Invalid name format", ... } 但该clean方法会引发非字段错误,这意味着错误与任何字段均无关。引发的错误可能如下: { "non_field_errors: [ "Invalid name format" ] } (注意:这里的错误格式可能不同。) 当我们想要对模型字段进行一些验证时,使用 clean 函数是有意义的。但是正如您提到的限制特定模型的对象数量的用例一样,save在模型上使用方法应该是一个不错的选择。 例子: def save(self, *args, **kwargs): if not self.pk and MyModel.objects.count() >= 10: raise ValidationError("Cannot create more than 10 objects.") super().save(*args, **kwargs) 您也可以使用方法执行相同的操作clean,但您需要确保该clean方法在每次保存之前执行,并且它不会自动发生,那么您需要手动触发它,可能在每次保存之前调用。使用方法full_clean可以节省这种开销。save heunle 2025-02-10T22:14:06+08:002025-02-10T22:14:06+08:00 好的文档永远是最好的。 我就是找不到它。 https://docs.djangoproject.com/en/5.1/ref/models/instances/#validating-objects
Django 模型中的方法
clean
用于执行模型范围的检查(验证)。Django DB 模型还有一种方法,clean_fields
该方法在每个字段上运行 clean 方法,如果有任何错误,则根据字段引发验证错误。因此,该clean_fields
方法引发的错误将基于字段,例如:但该
clean
方法会引发非字段错误,这意味着错误与任何字段均无关。引发的错误可能如下:(注意:这里的错误格式可能不同。)
当我们想要对模型字段进行一些验证时,使用 clean 函数是有意义的。但是正如您提到的限制特定模型的对象数量的用例一样,
save
在模型上使用方法应该是一个不错的选择。例子:
您也可以使用方法执行相同的操作
clean
,但您需要确保该clean
方法在每次保存之前执行,并且它不会自动发生,那么您需要手动触发它,可能在每次保存之前调用。使用方法full_clean
可以节省这种开销。save
好的文档永远是最好的。
我就是找不到它。
https://docs.djangoproject.com/en/5.1/ref/models/instances/#validating-objects