关键词:
【中文标题】Django Annotate - 获取不同字段值的列表【英文标题】:Django Annotate - get list of distinct field values 【发布时间】:2019-04-06 01:20:42 【问题描述】:我有 3 个模型 - Book
、Page
和 Language
。
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=100)
class Page(models.Model):
image = models.ImageField(upload_to='Uploaded_images')
language = models.ForiegnKey(Language, models.CASCADE)
book = models.ForeignKey(Book, models.CASCADE)
class Language(models.Model):
name = models.CharField(max_length=20)
Book
和 Page
对象之间存在一对多关系。书中的某些页面可能使用不同的语言,因此我在 Page
模型中添加了 ForeignKey
,而不是在 Book
模型中。
我想获取所有书籍的列表及其页面所用的语言。
我试过了:
books = Page.objects.annotate(
name=F('book__title')
).values(
'name', 'book_id'
).distinct(
).annotate(
page_count=Count('id'),
).values(
'name', 'book_id', 'language'
)
如果书中有 2 种语言,我会得到相同书名的 2 个条目。我只需要这本书的 1 个条目,并且能够将其语言显示为列表。
例如:如果有一本书的页面使用西班牙语和英语这两种语言中的任何一种,我想将书名和其中的语言提取为 ['English', 'Spanish']。
这可行吗?
【问题讨论】:
如果你使用 Postgres,也许你需要开始从class Book
获取数据并使用ArrayAgg
。链接:***.com/questions/43203014/…。如果你使用rest-framework,你可以使用Serializer。
这有帮助!请将此写为答案,以便更明显。
【参考方案1】:
如果你使用 Postgres,也许你需要从class Book
获取数据并使用ArrayAgg
。
链接:Django queryset annotate field to be a list/queryset
如果你使用rest-framework,你可以使用Serializer。
【讨论】:
Django Annotate - 我可以将在 annotate 中创建的字段用于在 annotate 中创建的另一个字段吗?
】DjangoAnnotate-我可以将在annotate中创建的字段用于在annotate中创建的另一个字段吗?【英文标题】:DjangoAnnotate-CanIusedthefieldscreatedinannotateforanotherfieldcreatedinannotate?【发布时间】:2021-01-3011:08:17【问题描述】:我正在计算每个部门... 查看详情
django基础aggregate和annotate方法使用详解与示例
...django的aggregate方法支持的聚合操作有AVG/COUNT/MAX/MIN/SUM等。annotate()方法详解annotate的中文意思是注释,我觉得是非常地词不达意,一个更好的理解是分组(GroupBy)。如果你想要对数据集先进行分组然后再进行某些聚合操作或排序时,... 查看详情
通过连接获取所有字段。 DJANGO
...Author的字段,通过单个查询?【问题讨论】:你可以使用annotate【参考方案1】:Books.objects.select 查看详情
Django Query 获取 ArrayField 列的所有不同值的计数
】DjangoQuery获取ArrayField列的所有不同值的计数【英文标题】:DjangoQuerytogetcountofalldistinctvaluesforcolumnofArrayField【发布时间】:2020-04-0608:51:45【问题描述】:计算ArrayField列的所有不同值的最有效方法是什么。假设我有一个名为MyModel... 查看详情
Django:在请求值时从查询集注释字段中删除小数前缀
...除小数前缀【英文标题】:Django:removeDecimalprefixfromquerysetannotatedfield,whenrequestingvalues【发布时间】:2020-05-0406:24:57【问题描述】:简而言之,我有这个查询集:monthly_revenue=list(Booking.objects.annotate(month=Month(\'created 查看详情
如何获取 Django 模型中字段的默认值?
】如何获取Django模型中字段的默认值?【英文标题】:HowdoIgetthedefaultvalueforafieldinaDjangomodel?【发布时间】:2010-11-2110:55:01【问题描述】:我有一个Django模型,其中一些字段指定了默认值。我希望稍后在我的代码中为我们获取这些... 查看详情
子查询 django 查询以从对象中获取最大的不同值并返回这些对象
】子查询django查询以从对象中获取最大的不同值并返回这些对象【英文标题】:Subquerydjangoquerytogetbiggestdisctintvaluesfromobjectsandreturnthoseobjects【发布时间】:2020-02-0510:08:49【问题描述】:所以我有这个查询,我需要重新过滤以从不... 查看详情
django获取模板中每个选择字段的总数(代码片段)
示例型号:SOURCE_CHOICES=('PH':'PHONE','OT':'OTHERS)classTest(models.Model):source=models.CharField(...,choices=SOURCE_CHOICES)通过使用以下查询集,我可以获得Model选项中每个项目的总数:Test.objects.values('source').annotate(Count('s 查看详情
如何在Django中按升序列出不同值的整数字段
】如何在Django中按升序列出不同值的整数字段【英文标题】:HowtolistintegerfieldofdistinctvaluesinascendingorderinDjango【发布时间】:2021-09-0316:38:40【问题描述】:我使用django作为后端,使用PostgresSql作为数据库。我遇到的一个问题是按升... 查看详情
072:django数据库orm聚合函数详解-aggregate和annotate(代码片段)
ORM聚合函数详解-aggregate和annotate:aggregate和annotate的区别:1、aggregate:返回使用聚合函数后的字段和值。2、annotate:在原来模型字段的基础之上添加一个使用了聚合函数的字段,并且在使用聚合函数的时候,会使用当前这个模型... 查看详情
django - 从不同的模型字段名称中获取一组对象
】django-从不同的模型字段名称中获取一组对象【英文标题】:django-Getasetofobjectsfromdifferentmodelsfieldnames【发布时间】:2013-11-2122:38:11【问题描述】:请看看我的模型。classBackgroundImage(models.Model):user=models.ForeignKey(User)image=models.ImageF... 查看详情
用于获取多个值的 Django MySQL 不同查询
】用于获取多个值的DjangoMySQL不同查询【英文标题】:DjangoMySQLdistinctqueryforgettingmultiplevalues【发布时间】:2012-09-0608:15:15【问题描述】:不幸的是,我有一个MySQL数据库与Django1.4.1一起使用。如果我做对了,不同的功能仅适用于POS... 查看详情
Django queryset 将字段注释为列表/查询集
...eryset将字段注释为列表/查询集【英文标题】:Djangoquerysetannotatefieldtobealist/queryset【发布时间】:2017-08-2909:42:59【问题描述】:我正在尝试使用django注释来创建查询集字段,该字段是一些相关模型属性的值列表。queryset=...qs=queryset... 查看详情
为啥 django 模型的空白和空值不同的选项?
】为啥django模型的空白和空值不同的选项?【英文标题】:Whyareblankandnulldistinctoptionsforadjangomodel?为什么django模型的空白和空值不同的选项?【发布时间】:2011-12-3020:28:09【问题描述】:在django模型中定义字段时,有两种方式表... 查看详情
为啥 django 模型的空白和空值不同的选项?
】为啥django模型的空白和空值不同的选项?【英文标题】:Whyareblankandnulldistinctoptionsforadjangomodel?为什么django模型的空白和空值不同的选项?【发布时间】:2011-12-3020:28:09【问题描述】:在django模型中定义字段时,有两种方式表... 查看详情
为啥 django 模型的空白和空值不同的选项?
】为啥django模型的空白和空值不同的选项?【英文标题】:Whyareblankandnulldistinctoptionsforadjangomodel?为什么django模型的空白和空值不同的选项?【发布时间】:2011-12-3020:28:09【问题描述】:在django模型中定义字段时,有两种方式表... 查看详情
为啥 django 模型的空白和空值不同的选项?
】为啥django模型的空白和空值不同的选项?【英文标题】:Whyareblankandnulldistinctoptionsforadjangomodel?为什么django模型的空白和空值不同的选项?【发布时间】:2011-12-3020:28:09【问题描述】:在django模型中定义字段时,有两种方式表... 查看详情
aggregate和annotate使用(代码片段)
aggregate和annotate方法的使用场景Django的aggregate和annotate方法属于高级查询方法,主要用于组合查询,是Django高手们必需要熟练掌握的。当我们需要对查询集(queryset)的某些字段进行计算或进行先分组再计算或排序,我们就需要使用agg... 查看详情