Django:使用.on_delete(SET_NULL)级联,如何同时更改其他属性

时间:2019-05-07 15:28:12

标签: python django python-3.x cascade

我觉得这应该很容易,但是我似乎在文档中找不到参考。

我有一个具有外键Resident的Django模型Property,当/如果用户删除了Property,我将删除 Cascade 设置为{ {1},因为我认为最好不要破坏此数据,因为可以对客户进行审计以获取有关先前居民的信息。

我的问题是我有SET_NULLactive居民,有一个居民搜索功能,它可以正常工作,但是今天我注意到一个错误:删除后,每个关联的inactive条目仍然具有设置为Resident active 属性。我还需要将true属性设置为Resident.active,以使那些居民无法再登录系统,或显示在我的搜索功能中以显示活跃的居民。

除了删除false时手动设置这些值之外,我该如何做?

以下是您需要的我的模型的相关部分:

Property

1 个答案:

答案 0 :(得分:0)

最简单的选择是覆盖delete模型中的Property方法,并在那里更改相关Resident的活动字段。但是,这具有与覆盖save相同的问题,主要是在批量删除或迁移中不调用此方法。 https://docs.djangoproject.com/en/dev/topics/db/models/#overriding-model-methods

另一种选择是使用信号并收听pre_delete or post_delete

第三个选择是检查property_id是否为NULL而不是使用活动字段。