相关领域的 Django 模型验证

Posted

技术标签:

【中文标题】相关领域的 Django 模型验证【英文标题】:Django model validation on related fields 【发布时间】:2012-08-07 16:12:03 【问题描述】:

何时是对模型中的相关字段进行验证的合适时间?

例如,如果我有一个与类播放列表有ManyToMany 关系的视频类,当视频更改为“私人”时,它应该从所有播放列表中删除。

在模型的 clean() 方法中执行此操作似乎很危险 - 因为模型可能无法通过验证并且无法保存,但播放列表引用将被删除。

post_savepre_save 信号中这样做是正确的方式吗?

【问题讨论】:

似乎是个好主意,或者您可以覆盖保存方法(恕我直言不太好)。 我会这样做是一个 post_save 信号。 【参考方案1】:

你有两个选择:

第一个是使用post_save 信号来完成这项工作。不是pre_save,因为保存可能会失败,我猜你只想在保存正常的情况下这样做。

其他选项是覆盖模型的 save() 方法,例如:

def save(self, *args, **kwargs):
    super(MyModel, self).save(*args, **kwargs)
    # do stuff for removing whatever you want to remove

我个人的选择是第一个,因为你处理不同的模型。如果你只需要处理当前的一个,我会做第二个。但这只是个人想法。

【讨论】:

以上是关于相关领域的 Django 模型验证的主要内容,如果未能解决你的问题,请参考以下文章

Django 1.8.3 - 具有相关对象的模型字段验证

由 sysdate 相关日期验证器引起的合成/冗余 Django 迁移

Django 通道 JWT 身份验证

Django 模型验证

在 Django 中分离表单输入和模型验证?

Django 模型条件验证