我有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
对象之间存在一对多关系。一本书中的某些页面可能使用不同的语言,因此我在ForeignKey
模型中而非在Page
模型中添加了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']。
这可行吗?
答案 0 :(得分:1)
如果您使用Postgres,也许您需要开始从class Book
获取数据并使用ArrayAgg
。
链接:Django queryset annotate field to be a list/queryset
如果使用其余框架,则可以使用序列化器。