Django'时间表'

时间:2010-06-27 13:02:38

标签: django join

我想制作一个'时间轴',其中包含来自用户的所有迷你博客帖子以及他关注的所有用户。 我希望所有这些帖子按日期排序。但是我如何'加入'帖子,因为'跟随'关系在另一个表中,所以我必须在两个表之间进行某种连接,以便获取数据。

目前,在我的“时间轴”中,只显示博客所有者的博文,并且我使用了以下查询:

     blog = New.objects.filter(created_by = request.user) 

但我想加入他所关注人员的帖子,意思是:

    following = Relations.objects.filter(initiated_by = request.user)

其中,关系是“关注关系”表。

我该怎么做?

我的模特:

class New(models.Model):
post = models.CharField(max_length=120)
date = models.DateTimeField(auto_now_add=True)
created_by = models.ForeignKey(User, blank=True) 
objects = NewManager()   


class Relations(models.Model):
initiated_by = models.ForeignKey(User, editable=False, related_name = 'initiator')
date_initiated = models.DateTimeField(auto_now=True, editable = False)
follow = models.ForeignKey(User, editable = False, related_name = "follow") 
date_follow = models.DateTimeField(auto_now=True, editable = False)

1 个答案:

答案 0 :(得分:2)

也许像(使用Q objects):

blogs = New.objects.filter(Q(created_by = request.user) | Q(relations_set__initiated_by = request.user))

这假定您拥有从RelationsNew的外键。请参阅the documentation about following relationships backward

如果您的Relations模型没有New的外键,而是用户表的外键,例如following = models.ForeignKey(User),那么您可以执行类似

blogs = New.objects.filter(Q(created_by = request.user) | Q(created_by__follow__initiated_by = request.user))

现在,从Relations模型到用户模型的外键应该有related_name = 'follow'