首页 > 解决方案 > 检查具有 2 个列表/查询集的两个实体/模型之间是否已经存在关系

问题描述

我有 3 个模型:A、B 和 C。


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)

我需要的:

所以我有:

a_type_b = Account.objects.filter(type=ACCOUNT_TYPE_B)

有什么方法是检查 B 模型/对象是否已经附加/相关,而不是循环遍历所有帐户并检查?,因为这可能需要大量时间和查询并且效率不高

  1. 不要让 C 连接到 type_B 帐户,反之亦然模型创建/更新。

标签: djangodjango-modelsdjango-queryset

解决方案


您可以通过相关模型的__isnull进行过滤pk,例如:

A.objects.filter(type=A.ACCOUNT_TYPE_B, b__pk__isnull=True)

推荐阅读