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

Le shell POSIX (sh) redirige stderr vers stdout et capture stderr et stdout dans des variables