Notez qu'il était difficile de trouver des informations sur la jointure externe gauche dans l'ORM de Django.
J'utilise souvent select_related ()
et prefetch_related ()
pour extraire les éléments que le modèle spécifie comme clés externes.
class User(models.Model):
name = models.CharField()
class Comment(models.Model):
user = models.ForeignKey(User, null=True)
content = models.CharField()
Par exemple, si un tel modèle est défini, il peut être tiré comme suit.
comment = Comment.objects.select_related().first()
print(comment.user.name)
Il semble que l'extraction inversée soit possible si une seule donnée est utilisée comme référence.
comments = User.objects.get(pk=1).comment_set.all()
# id=Vous pouvez extraire les commentaires qui contiennent 1 utilisateur
Si vous faites quelque chose comme ↑, vous constaterez que la jointure Django est principalement une jointure interne. Que faites-vous de la jointure externe après avoir commencé à utiliser le système d'agrégation? Ce sera.
comments = Comment.objects.filter(user__isnull=True)
C'est vrai.
Je l'ai vérifié une fois mais je l'ai oublié, alors je l'ai noté.
Il est important que les éléments soient déclarés avec models.ForeignKey ()
à combiner.
(Sinon, vous ne pouvez pas faire quelque chose comme comment.user.name)
Recommended Posts