关于相关领域的Django模型验证

时间:2012-08-10 11:00:30

标签: django django-models django-signals django-validation

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

例如,如果我有与类播放列表具有ManyToMany关系的类视频,则当视频更改为“私有”时,应将其从所有播放列表中删除。

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

post_savepre_save信号中以正确的方式进行吗?

1 个答案:

答案 0 :(得分:0)

您有两种选择:

首先使用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

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