python - Django - 收集器依赖项不包括可删除模型是可空字段的模型
问题描述
假设我有以下模型:
class Foo(models.Model):
...
class Bar(models.Model):
foo = models.ForeignKey(Foo)
class Baz(models.Model):
foo = models.ForeignKey(Foo, null=True, blank=True)
如果我尝试使用 Django Collector 获取 a 的依赖项Foo
,如下所示,我将获取所有依赖项,包括Bar
,除了Baz
:
from django.db.models.deletion import Collector
def get_related_models(obj):
collector = Collector(using='default')
collector.collect([obj])
return collector.dependencies.get(obj.__class__, set())
get_related_models(Foo.objects.get(pk=1))
我怀疑原因是那Foo
是 中的一个可为空的字段Baz
,所以Collector
可能认为删除 aFoo
只会使相应Baz
对象的Foo
字段指向空。但是,如果您删除一个Foo
相关的Baz
也将被删除。
我想通知我的用户Baz
依赖于Foo
,尽管该Foo
字段Baz
可以为空。
解决方案
我当前的解决方案涉及覆盖Collector.add
方法 fromdjango.db.models.deletion
以便不再忽略可为空的关系:
def add(...):
# same default code goes here
...
# overriden behavior (check for nullable was removed)
if source is not None:
# same code
....
我不确定这是否是最好的解决方案,但自从我提交了代码后,该应用程序运行良好。如果出现由它引起的一些问题,我将更新此答案(或将其删除)。
推荐阅读
- c++ - 图像矩阵迭代器
列异常 - javascript - 使用 addEventListener 加载 HTML 内容的问题
- android - 如何“过滤”满足“不等于”条件的 Firestore 数据?
- python - 很多点的Python曲线
- r - 使用 intel-pin 检测 R 程序
- node.js - 为什么 mongodb 聚合 $avg 代码返回所有未分组的文档?
- javascript - 如何使用 jszip 从客户端的 ZIP 文件中选择文件
- sqlite - 找不到 SQLiteConnection 的类型或命名空间
- netlogo - 如何让 n 个海龟在每个循环中移动到同一个地方?
- javascript - 如何修复 - 找不到模块:无法解析 '@babel/runtime/helpers/objectWithoutPropertiesLoose'