0

我有 3 个模型-Book和。PageLanguage

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对象之间存在一对多的关系。一本书中的某些页面可以是不同的语言,所以我添加了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']。

这是可行的吗?

4

1 回答 1

3

如果您使用 Postgres,也许您需要开始获取数据class Book并使用ArrayAgg.

链接:Django queryset 将字段注释为列表/查询集

如果你使用rest-framework,你可以使用Serializer。

于 2018-11-02T07:47:49.063 回答