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