Django:根据热门Feed的喜好来订购对象

时间:2017-12-08 03:44:49

标签: python django django-models django-rest-framework django-views

我想实施'热门'Feed。我想展示一系列最喜欢的帖子。

这是抽象模型架构。

(Model) Like 
      user = User
      content_type = Post, User, Group
      object_id = 22

(Model) Post
      user = User
      content = ''
      created_at = '12082017'

在views.py中,我希望得到排序的查询集,如

 Post.objects.order_by('-like')[:30] 

由于我的Post模型没有like字段,我无法使用order_by

我正在考虑添加score字段以跟踪喜欢和当前时间。你觉得它会起作用吗? :)

对于如何制作热门饲料的任何想法或建议都将受到高度赞赏。谢谢

1 个答案:

答案 0 :(得分:1)

为此目的,您有一种称为反向通用关系的东西:

Reverse Generic Relations

为您的帖子模型添加反向通用关系,您可以获得喜欢的数量的计数,然后根据基于流行度的排序的喜欢对其进行排序。

在你的帖子模型中添加:

likes = GenericRelation(Like)

也许使用注释进行排序:

Post.objects.annotate(like_count=Count('likes')).order_by('-like_count')

你会得到一个额外的字段' like_count '对于每个帖子对象加上它将根据喜欢的数量进行排序。