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 isnull
ici https://docs.djangoproject.com/en/4.0/ref/models/querysets/#isnull
Commentaires
Enregistrer un commentaire