我想制作一个'时间轴',其中包含来自用户的所有迷你博客帖子以及他关注的所有用户。 我希望所有这些帖子按日期排序。但是我如何'加入'帖子,因为'跟随'关系在另一个表中,所以我必须在两个表之间进行某种连接,以便获取数据。
目前,在我的“时间轴”中,只显示博客所有者的博文,并且我使用了以下查询:
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)
答案 0 :(得分:2)
也许像(使用Q objects):
blogs = New.objects.filter(Q(created_by = request.user) | Q(relations_set__initiated_by = request.user))
这假定您拥有从Relations
到New
的外键。请参阅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'
。