Django Annotate - 获取不同字段值的列表

     2023-02-23     22

关键词:

【中文标题】Django Annotate - 获取不同字段值的列表【英文标题】:Django Annotate - get list of distinct field values 【发布时间】:2019-04-06 01:20:42 【问题描述】:

我有 3 个模型 - BookPageLanguage

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)

BookPage 对象之间存在一对多关系。书中的某些页面可能使用不同的语言,因此我在 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... 查看详情