开发者

Django 'timeline'

I want to make a 'timeline' containing all mini blog posts from a user, and all the user he is following. I want all these posts to be ordered by date., but how can I 'join' the posts, because the 'following' relation is in another table, so I have to make some kind of a join between the two tables, for taking the data.

For now, in my 'timeline', there appears only the blog posts of the owner of the blog, and I user a query like:

     blog = Ne开发者_如何学JAVAw.objects.filter(created_by = request.user) 

but I want to join there posts with the posts of the persons he is following, meaning:

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

where Relations is the 'Follow relation' table.

How can I do it?

My models:

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)


Maybe something like (using Q objects):

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

This assumes that you have a foreign key from Relations to New. See the documentation about following relationships backward.

If your Relations model doesn't have a foreign key to New but a foreign key to the users table, say following = models.ForeignKey(User), then you can maybe do something like

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

Now, your foreign key from the Relations model to the user model should have related_name = 'follow'.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜