【问题标题】:Django Overriding Model Clean() vs Save()Django 覆盖模型 Clean() 与 Save()
【发布时间】:2012-02-21 07:35:59
【问题描述】:

保存模型时,我有几个操作要执行,尤其是从管理员那里。我将几个字段大写并检查以确保一个字段或另一个字段已填写。我还创建了现场蛞蝓。现在,这些在覆盖 clean 和 save 函数之间是分开的。它现在有效,但我很好奇何时使用它们。我浏览了文档,但找不到具体何时使用。

【问题讨论】:

标签: python django django-models django-admin


【解决方案1】:

您应该使用 clean 来完成与验证相关的工作,并解析/更改/以其他方式清理输入。大写字段和生成 slug 可能会发生在这里。我还使用 clean 将 post_type 之类的字段强制为代理模型中的特定值。如果您在 clean 内提高 django.core.exceptions.ValidationError('error text'),则 'error text' 将添加到 form.non_field_errors

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

【讨论】:

  • 啊从我的键盘上偷了字。不错的答案。我要添加的唯一内容是指向文档的链接,其中有一个很好的例子,ValidationError 被抛出:docs.djangoproject.com/en/dev/ref/models/instances/…
  • 不是 django.forms.ValidationError,而是 django.core.exceptions.ValidationError
  • 好收获。我想我总是从表单中导入它(从 core.exceptions 导入它)。更新答案。
猜你喜欢
  • 1970-01-01
  • 2021-11-21
  • 2018-02-25
  • 2019-06-10
  • 2011-09-28
  • 1970-01-01
  • 2021-04-10
  • 2016-08-05
  • 1970-01-01
相关资源
最近更新 更多