我有两个模型,作者和文章:
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/