Django-在带有注释的特定字段上使用不同

问题描述

我有以下型号:

class Post(models.Model):
    title = models.CharField(max_length=30)

class PostView(models.Model):
    post = models.ForeignKey(Post,related_name='views',on_delete=models.CASCADE)
    user = models.ForeignKey(get_user_model(),related_name='my_views')
    created = models.DateTimeField(auto_Now_add=True)

我希望获得按唯一观看次数排序的帖子。 我通过以下代码获取按视图排序的帖子:

filters = {
    'created__date__gte': datetime.datetime(year=2020,month=1,day=1),'created__date__lte': datetime.datetime(year=2021,}

qs = Post.objects.all().annotate(
    total_views=Count('views',filter=Q(**filters))
).order_by('-total_views')

以上代码将所有视图计算为 total_views。我想通过 user 获得独特的视图。 可以用 ORM 做到这一点吗?

解决方法

您可以直接计算 views 并在此聚合上应用 views__user,而不是计算 distinct=True

qs = Post.objects.all().annotate(
    total_views=Count('views__user',distinct=True,filter=Q(**filters))
).order_by('-total_views')

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...