Django ORM эквивалент левого эксклюзивного JOIN

Я относительно новичок в Django и у меня есть следующие модели в моем проекте django (3.2):

class projectsA(models.Model):
    projectID_A = models.BigIntegerField(primary_key=True)
    project_name_A = models.TextField(blank=True, null=True)
    project_desc_A = models.TextField(blank=True, null=True)
    projektID_B = models.ForeignKey('projectsB', models.DO_NOTHING, db_column='projektID_B', blank=True, null=True, db_constraint=False)

    class Meta:
       managed = False
       db_table = 'projectsA'

class projectsB(models.Model):
    projectID_B = models.BigIntegerField(primary_key=True)
    project_name_B = models.TextField(blank=True, null=True)
    project_desc_A = models.TextField(blank=True, null=True)
    
    class Meta:
      managed = False
      db_table = 'projectsB'

Я хочу получить все проекты из projectsA, которых нет в projectsB. SQL-эквивалентом будет

SELECT * FROM projectsA a LEFT JOIN projectsB b on a.projektID_B = b.projectID_B WHERE b.projectID_B is null

Я пробовал использовать .exclude или .select_related() и несколько других подходов, но не могу найти решение для этого сценария. Заранее спасибо.

Это должно быть что-то вроде:

queryset = projectsA.objects.filter(projektID_B__isnull=True)

Вы можете прочитать о isnull здесь https://docs.djangoproject.com/en/4.0/ref/models/querysets/#isnull

Вернуться на верх