Beachten Sie, dass es schwierig war, Informationen zu Left Outer Join in Djangos ORM zu finden.
Ich verwende oft select_related ()
undprefetch_related ()
, um Elemente abzurufen, die das Modell als externe Schlüssel angibt.
class User(models.Model):
name = models.CharField()
class Comment(models.Model):
user = models.ForeignKey(User, null=True)
content = models.CharField()
Wenn beispielsweise ein solches Modell definiert ist, kann es wie folgt gezogen werden.
comment = Comment.objects.select_related().first()
print(comment.user.name)
Es scheint, dass das Rückwärtsziehen möglich ist, wenn nur eine Daten als Referenz verwendet wird.
comments = User.objects.get(pk=1).comment_set.all()
# id=Sie können Kommentare extrahieren, die 1 Benutzer enthalten
Wenn Sie so etwas wie ↑ machen, werden Sie feststellen, dass der Django-Join meistens ein Inner-Join ist. Was machen Sie mit Outer Join, nachdem Sie mit dem Betrieb des Aggregationssystems begonnen haben? Es wird sein.
comments = Comment.objects.filter(user__isnull=True)
Korrekt.
Ich habe es einmal überprüft, aber vergessen, also habe ich es aufgeschrieben.
Es ist wichtig, dass die Elemente mit models.ForeignKey ()
deklariert werden, um sie zu kombinieren.
(Andernfalls können Sie so etwas wie comment.user.name nicht ausführen.)
Recommended Posts