python - Django:使用 .on_delete(SET_NULL) 级联,如何同时更改其他属性
问题描述
我觉得这应该很容易,但我似乎无法在文档中找到参考。
我有一个Resident
具有 ForeignKey的 Django 模型Property
,当/如果用户删除Property
我已将删除级联设置为,SET_NULL
因为我觉得最好不要破坏这些数据,因为可以审计客户端以获取有关以前居民的信息。
我的问题是,我拥有的地方和居民有一个居民搜索功能,它可以正常工作,但我今天注意到一个错误,即当删除一个属性时,每个关联条目仍然有一个活动属性设置为. 我还需要能够将属性设置为,这样那些居民就不能再登录系统,或者在我的搜索功能中显示活跃居民。active
inactive
Resident
true
Resident.active
false
除了在删除 a 时手动设置这些值之外,我该怎么做Property
?
如果您需要,这是我的模型的相关部分:
class Resident(models.Model):
property_id = models.ForeignKey('Property', null=True,
on_delete=models.SET_NULL, db_column='property_id')
active = models.IntegerField(default=1)
解决方案
最简单的选择是覆盖模型delete
中的方法Property
并更改相关的活动字段Resident
。但是,这与覆盖具有相同的问题save
,主要是在批量删除或迁移中不调用此方法。https://docs.djangoproject.com/en/dev/topics/db/models/#overriding-model-methods
另一种选择是使用信号并收听pre_delete 或 post_delete
第三种选择是检查是否property_id
是NULL
而不是使用活动字段。
推荐阅读
- reactjs - 为什么 React 抱怨没有提供密钥?
- flutter - 从一个小部件到另一个小部件画一条线并比较它们的内容
- java - 为 SmallRye-Kafka 传入消息指定 Avro 类类型
- linux - 如何为主目录中的所有用户创建带有文件夹的文件
- android - 支持布局的高级 2D 绘图 API
- javascript - 通过标头发送到服务器的 Cookie 令牌
- java - Spring Data JPA + Hibernate 保存子实体而不首先找到父实体
- mongodb - 从子文档数组中删除单个字符串
- windows-terminal - Windows 终端,在选项卡中启动两个命令
- c - 如何将程序组织成头文件和c文件