Проверьте, существует ли уже связь между двумя сущностями / моделями, имеющими 2 списка / наборов запросов - PullRequest
0 голосов
/ 24 мая 2018

У меня есть 3 модели: A, B и C.

  • A имеет тип, который определяет, может ли B или C подключиться к нему
  • B имеет отношение OnetoOne к A
  • C имеет отношение OnetoOne к A

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Объекты не связаны
  • так же, как 1 для C

Итак, у меня есть:

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

Есть что-нибудь, чтобы проверить, является ли B модель / объектуже подключен / связан вместо зацикливания всех учетных записей и проверки?, потому что это может занять много времени и запросов и неэффективно

Не позволяйте C подключаться к учетной записи type_B и наоборот при создании / обновлении модели.

1 Ответ

0 голосов
/ 24 мая 2018

вы можете отфильтровать по __ isnull для pk соответствующей модели, например:

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