是否可以在 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>))
这有可能吗?
最佳答案
Django 的 ORM 调用转换为 SQL。如果它不能用 SQL 查询来完成,通常意味着你也不能用 ORM 来完成。您请求的是一个不同的 where
子句(除非我遗漏了什么或误解了),需要不同的查询。这给您留下了 2 个选择:
- 运行 2 个不同的查询(使用不同的
filter()
参数) - 如果这是一个您不想运行两次的“昂贵”查询,您可以只从数据库中提取一次数据并在普通 python 代码中执行聚合。
关于Django 通过条件注解过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14802439/