2012-01-28 162 views
24

保存模型时执行一些操作,特别是从管理员。我利用几个字段并检查以确保其中一个字段或另一个字段被填充。我也创造了场地slu。。现在将这些分为覆盖干净和保存功能之间的区别。它现在可以工作,但我很好奇什么时候使用它们。我浏览了文档,并且找不到具体使用什么时候。Django覆盖模型清洁()vs保存()

回答

30

您应该使用clean来执行验证相关的工作,并解析/更改/以其他方式清理输入。资本化领域和产生slu can可能发生在这里。我还使用clean来强制类似于post_type的字段在代理模型中具有特定的值。如果您清洁内部django.core.exceptions.ValidationError('error text')'error text'被添加到form.non_field_errors

保存是改变模型实际保存方式的地方。例如,我使用save来创建上传图片的裁剪。 ValidationError如果在这里提出,则不会被捕获,我觉得这是两者之间最重要的实际区别。

+2

啊偷走了我的键盘的话。很好的答案。我唯一要添加的是链接到文档的链接,其中有一个很好的引发了ValidationError的示例:https://docs.djangoproject.com/en/dev/ref/models/instances/#django .db.models.Model.clean – 2012-01-28 20:56:42

+4

不是django.forms.ValidationError,而是django.core.exceptions.ValidationError – benjaoming 2013-03-01 17:02:45

+0

好的。我想我只是总是从表单(从core.exceptions中导入它)导入它。更新答案。 – dokkaebi 2013-03-01 17:14:44