Ich bin neu bei Python und Django, also bitte gedulden Sie sich mit mir.Komplexe Abfrage mit Django (Posts von allen Freunden)
Ich habe folgende Modelle:
class User(models.Model):
name = models.CharField(max_length = 50)
...
class Post(models.Model):
userBy = models.ForeignKey(User, related_name='post_user')
userWall = models.ForeignKey(User, related_name='receive_user')
timestamp = models.DateTimeField()
post = models.TextField()
class Friend(models.Model):
user1 = models.ForeignKey(User, related_name='request_user')
user2 = models.ForeignKey(User, related_name='accept_user')
isApproved = models.BooleanField()
class Meta:
unique_together = (('user1', 'user2'),)
Ich weiß, dass dies nicht der beste/einfachste Weg sein, kann es mit Django zu handhaben, aber ich lernte es auf diese Weise, und ich mag es halten wie diese.
Nun, alles, was ich tun möchte, ist bekommen alle Post von einer Person und es ist Freunde. Die Frage ist jetzt, wie man es mit den Django-Filtern macht?
Ich denke, in SQL es in etwa so aussehen würde:
SELECT p.* FORM Post p, Friend f
WHERE p.userBy=THEUSER OR (
(f.user1=THEUSER AND f.user2=p.userBy) OR
(f.user2=THEUSER AND f.user1=p.userBy)
)
nur ohne Garantie auf Richtigkeit, eine Vorstellung des Ergebnisses zu geben, die ich suche.
Gibt es einen Fremdschlüssel vom Benutzer, der auf Freunde zeigen muss? – cesar09
Nein. Das Bit "__friend" folgt der Beziehung rückwärts, da "Friend" einen FK zu "User" hat. –
Weitere Informationen finden Sie in der Dokumentation zu [Suchen, die Beziehungen überspannen] (https://docs.djangoproject.com/en/dev/topics/db/queries/#lookups-that-span-relationships). –