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



我有三个型号——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'
)

如果书中有两种语言,我会得到两个相同书名的条目。我只需要为这本书输入一个条目,就可以以列表的形式显示它的语言。

例如:如果有一本书的页面是西班牙语和英语这两种语言中的任何一种,我想把书名和其中的语言提取为[英语,西班牙语]。

这可行吗?

如果使用Postgres,可能需要从class Book开始获取数据并使用ArrayAgg

链接:Django queryset注释字段为列表/queryset

如果使用rest框架,则可以使用Serializer。

最新更新