然后我找到了这张照片:
因此,我们有很多干净的功能,我只想知道他们在做什么。 和 如果要添加一个过滤器,使用“清洁”是否正确,该过滤器确保我们不会从一个模型(表)中x对象多?
我认为使用“ def save()”似乎更适合解决这种检查,但我不确定。
django模型中的
clean
clean_fields
的方法,该方法在每个字段上运行干净的方法,并在有任何错误(如果有任何错误)基于字段中引起验证错误。因此,
clean_fields
方法提出的错误将基于字段,例如:{
"name": "Invalid name format",
...
}
但是clean
方法会引起非场错误,这意味着错误与任何字段无关。提出的错误可能是:
{
"non_field_errors: [
"Invalid name format"
]
}
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
方法方法来保存此开销。