我是Python和Django的新手,所以请耐心等待我。与Django的复杂查询(所有朋友的帖子)
我有以下型号:
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'),)
我知道这可能不是使用Django来处理它的最佳/最简单的方法,但我学会了这种方法,我想保持这个样子。
现在,我想要做的是获取所有帖子从一个人,它的朋友。现在的问题是如何用Django过滤器做到这一点?
我想在SQL它会是这个样子:
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)
)
不保证正确性,只是为了给我找的结果的想法。
是否有来自用户的外键,必须指向朋友? – cesar09
不会。“__friend”位跟随关系向后,因为'Friend'对'User'有FK。 –
有关更多信息,请参阅[跨越关系的查找]的文档(https://docs.djangoproject.com/en/dev/topics/db/queries/#lookups-that-span-relationships)。 –