Django ORM équivalent à gauche exclusif JOIN

Django est relativement nouveau et j'ai les modèles suivants dans mon projet 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'

Je veux obtenir tous les projets de projetsA qui ne sont pas dans projetsB. L'équivalent SQL serait

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

J'ai essayé avec.exclude ou.select_related() et plusieurs autres approches, mais je ne trouve pas de solution pour ce scénario. Merci d'avance.


Solution du problème

Cela devrait être quelque chose comme:

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

Vous pouvez en savoir plus isnullici https://docs.djangoproject.com/en/4.0/ref/models/querysets/#isnull

Commentaires

Posts les plus consultés de ce blog

Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

Détecter les appuis sur les touches fléchées en JavaScript

Une chaîne vide donne "Des erreurs ont été détectées dans les arguments de la ligne de commande, veuillez vous assurer que tous les arguments sont correctement définis"