是否可以在Django中使用“条件”注释? 比方说,有以下模型
class Author(models.Model):
name = models.CharField()
class Article(models.Model):
title = models.CharField()
published = models.BooleanField()
现在我想选择一些有限(过滤)的作者查询集,并使用总书数和已发布的书籍数来注释它们,供以后使用(比如在作者查询集上应用过滤器,或者对其进行排序)。像
这样的东西 Author.objects.filter(name__icontains = 'a').annotate(total_books = Count('books')).annotate(published_books = Count('books', <here published=true filter>))
无论如何这可能吗?
答案 0 :(得分:1)
Django的ORM调用转换为SQL。如果无法使用SQL查询完成,通常意味着您也无法使用ORM执行此操作。您要求的是一个不同的where
条款(除非我遗漏了某些内容或误解),需要不同的查询。这为您提供了两个选项:
filter()
参数)答案 1 :(得分:0)
只是一个简单的想法,你可以试试:
Author.objects.filter(name__icontains = 'a').\
annotate(total_books = Count('books')).\
annotate(published_books = Count('books__published'))
由于BooleanField
被写为0/1整数,因此它可以完成这项工作。或者它可能不是:)只需在你的代码中尝试。