python - Django 和条件聚合

标签 python django aggregate

我有两个模型,作者和文章:

class Author(models.Model):
    name = models.CharField('name', max_length=100)

class Article(models.Model)
    title = models.CharField('title', max_length=100)
    pubdate = models.DateTimeField('publication date')
    authors = models.ManyToManyField(Author)

现在我想选择所有作者并用他们各自的文章数对其进行注释。这是 Django 的小菜一碟 aggregates .问题是,它应该只计算已经发表的文章。根据ticket 11305在 Django 工单跟踪器中,这还不可能。我尝试使用该票证中提到的 CountIf 注释,但它没有引用日期时间字符串,也没有进行它需要的所有连接。

那么,除了编写自定义 SQL 之外,最好的解决方案是什么?

最佳答案

你可以使用 django-aggregate-if应用程序,灵感来自 ticket 11305 . 或者您可以只使用查询集的 extra 方法(假设您的应用程序名为“articles”):

Author.objects.all().extra(
    select={'article_count': 'SELECT COUNT(*) FROM "articles_article" '
                             'INNER JOIN "articles_article_authors" '
                             'ON "articles_article"."id" = '
                             '   "articles_article_authors"."article_id" '
                             'WHERE "articles_article_authors"."author_id" = '
                             '      "articles_author"."id" '
                             'AND "articles_article"."pubdate" IS NOT NULL'})

关于python - Django 和条件聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2875122/

相关文章:

python - 在 pandas 中并排打印 .describe()

python - Django 无法在 DATABASES 'default' 为空时运行测试

python - 如何防止灯具与 django post_save 信号代码冲突?

MySQL ISAM 搜索优化

python - 打开文件缩进意外

python - 使用 QPolygonF 绘图时如何在 QGraphicsPolygonItem 内添加文本?

python - Django 重新发送激活链接,缺少 1 个必需的位置参数 : 'user'

R 根据一列中的值汇总跨列的唯一值

r 按 id 聚合或折叠特定列值

python - TypeError : tuple indices must be integers