检查两个具有2个列表/查询集的实体/模型之间是否已存在关系

时间:2018-05-24 08:12:58

标签: django django-models django-queryset

我有3个型号:A,B和C.

  • A具有定义B或C是否可以连接到它的类型
  • B有一个OnetoOneRelation到A
  • 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模型/对象是否已经附加/相关而不是通过所有帐户循环并检查?,因为这可能需要花费大量时间和查询并且效率不高

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

1 个答案:

答案 0 :(得分:1)

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

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