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

Comment signer la connexion OKEx API version 5 avec websockets ?

La fonction GCP Cloud pour écrire des données dans BigQuery s'exécute avec succès, mais les données n'apparaissent pas dans la table BigQuery

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