Получение элементов из набора queryset на основе левого объединения в django

У меня есть две модели:

class A(models.Model):
    field1 = models.CharField(max_length=100)
    field2 = models.CharField(max_length=100)

class B(models.Model):
    a_field = models.ForeignKey(null=True,blank=True,related_name='a',on_delete=models.SET_NULL)
    field2 = models.CharField(max_length=100)

Я хочу получить все элементы модели A, которые не связаны с B.
Вот запрос, который я написал, но он не работает:

B.objects.select_related("a_field").filter(a_field__isnull=True)

Как я могу решить эту проблему?

Я хочу получить все элементы модели A, которые не относятся к B.

Вы можете сделать запрос с помощью:

A.objects.filter(a=None)

a происходит от related_name=… значения [Django-doc] для ForeignKey, но нет смысла называть это 'a', поскольку это отношение в обратное , так что от A к B, обычно имеет смысл назвать это 'bs', так:

class B(models.Model):
    a_field = models.ForeignKey(
        A,
        null=True,
        blank=True,
        related_name='bs',
        on_delete=models.SET_NULL
    )
    # …

и, таким образом, запрос с:

A.objects.filter(bs=None)
Вернуться на верх