Django 按出现次数对模型进行排序
这个问题已经被问了好几次了,但我一直无法让我的代码正常工作。不管怎样,假设我有一个博客,上面有博客帖子:Django 按出现次数对模型进行排序,django,orm,count,Django,Orm,Count,这个问题已经被问了好几次了,但我一直无法让我的代码正常工作。不管怎样,假设我有一个博客,上面有博客帖子: class BlogPost(models.Model): # This class doesn't really matter author = models.ForeignKey(myUser) text = models.TextField() 碰巧,我使用另一个模型记录每个博客帖子的访问量: class Activity(models.Model): us
class BlogPost(models.Model): # This class doesn't really matter
author = models.ForeignKey(myUser)
text = models.TextField()
碰巧,我使用另一个模型记录每个博客帖子的访问量:
class Activity(models.Model):
user_id = models.CharField()
# I log different types of activities, hence the choice
action_id = models.IntegerField(choices=ACTIVITY_ACTIONS)
object_id = models.CharField()
created_at = models.DateTimeField()
我想要的是获得自精确日期以来访问量最大的博客帖子,按浏览量排序。我现在正在做什么(在活动管理器中):
这不管用。我做了一些测试:我创建了三篇博文,博文a被浏览了两次,博文b被浏览了一次,博文c没有任何浏览。当我调用自以来浏览次数最多的get\u blogposts\u时,我确实会得到blogpost\u a和blogpost\u b,但顺序似乎是随机的
我尝试使用以下工具进行一些调试:
for blogpost in blogposts:
print blogpost.nb_views
两个博客帖子(a和b)都有nb\u视图==1
我做错了什么?你指望的是“id”,当id是唯一的时,它总是1。例如,你必须通过foreignkey链接blogpost和activity,并依靠这种关系。好吧,很公平。问题是我不想在活动中使用foreignkey,因为对象可以是blogpost或其他东西。而且已经决定通用外键的性能还不够。还有别的办法吗?我的意思是,blogpost_id正好包含我需要的信息,有没有“Django”的使用方法?不需要通用外键,只需将它们与活动模型上的外键链接即可(即:blogpost=models.ForeignKey(blogpost)。我一定不太清楚:活动记录了很多不同的东西,用户查看博客帖子,用户评论博客帖子等等。这意味着object\u id
可以包含博客帖子或其他东西的id。因此我不能使用“简单”外键来访问博客帖子。
for blogpost in blogposts:
print blogpost.nb_views