django - 检查具有 2 个列表/查询集的两个实体/模型之间是否已经存在关系
问题描述
我有 3 个模型:A、B 和 C。
- A 具有定义 B 或 C 是否可以连接到它的类型
- B 与 A 有 OnetoOneRelation
- C 与 A 具有 OnetoOne 关系
class A(models.Model):
type = models.SmallIntegerField(
choices=A_TYPE_CHOICES, default=ACCOUNT_TYPE_B
)
class B(models.Model):
a = models.OneToOneField(A, related_name='b', on_delete=models.CASCADE)
class C(models.Model):
a = models.OneToOneField(A, related_name='c', on_delete=models.CASCADE)
我需要的:
- 获取所有类型 B 但 B 对象不相关的帐户
- 与 C 的 1 相同
所以我有:
a_type_b = Account.objects.filter(type=ACCOUNT_TYPE_B)
有什么方法是检查 B 模型/对象是否已经附加/相关,而不是循环遍历所有帐户并检查?,因为这可能需要大量时间和查询并且效率不高
- 不要让 C 连接到 type_B 帐户,反之亦然模型创建/更新。
解决方案
您可以通过相关模型的__isnull进行过滤pk
,例如:
A.objects.filter(type=A.ACCOUNT_TYPE_B, b__pk__isnull=True)
推荐阅读
- android - 将 SDK 版本 26 更改为 28 时如何修复 Gradle 错误
- c# - How to replace string's words first and last characters
- powershell - 如何使用 Powershell 限制复制文件?
- javascript - 如何从 Google Maps Searchbox 中获取价值并推送到新的 div 标签?
- c - C中的多级管道
- javascript - 如何呈现 HTMLCollection 项目?
- python - 如何获取用户当前系统主题颜色
- sql - 如何使用简单的翻译功能更新 clob 数据类型字段中的 xml 数据?
- ios - 我不知道使用 UIView.animate 或创建 UIImageView 方法有什么问题。我正在使用快速语言
- tortoisegit - 如何在 tortoisegit 中设置 libgit2 而不是 git.exe?