Django条件注释过滤器
有可能在Django中有“条件”注释吗? 比如说,有以下几种模式Django条件注释过滤器,django,django-models,django-orm,Django,Django Models,Django Orm,有可能在Django中有“条件”注释吗? 比如说,有以下几种模式 class Author(models.Model): name = models.CharField() class Article(models.Model): title = models.CharField() published = models.BooleanField() 现在,我想选择一些有限的(过滤的)作者查询集,并用总图书数量和已出版图书数量对它们进行注释,以供以后使用(如对作者查询集应用
class Author(models.Model):
name = models.CharField()
class Article(models.Model):
title = models.CharField()
published = models.BooleanField()
现在,我想选择一些有限的(过滤的)作者查询集,并用总图书数量和已出版图书数量对它们进行注释,以供以后使用(如对作者查询集应用过滤器,或对其排序)。差不多
Author.objects.filter(name\u icontains='a')。注释(total\u books=Count('books'))。注释(published\u books=Count('books'))
无论如何,这是可能的吗?Django的ORM调用转换成SQL。如果不能用SQL查询来完成,通常意味着不能用ORM来完成。您请求的是一个不同的
where
子句(除非我遗漏了什么或误解),需要不同的查询。这给您留下了两个选项:
filter()
参数)简单一点,您可以尝试:
Author.objects.filter(name__icontains = 'a').\
annotate(total_books = Count('books')).\
annotate(published_books = Count('books__published'))
由于
BooleanField
被写为0/1整数,因此它可以完成这项工作。也可能不是:)只需在代码中尝试即可。无法从我的手机编辑问题。不管怎样,我希望它生成sql,在articles表的左侧外部联接上有两个计数,其中一个的条件published=true。找到解决方案了吗?我也有类似的情况。我有附加到项目的文件,可以使用删除的布尔字段删除这些文件。当我对文件进行注释以获取其状态时,它包括已删除的文件,即使文件对象管理器告诉Django忽略已删除的文件,除非指定。