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