簡體   English   中英

django 查詢注釋值從反向外鍵獲取列表

[英]django query annotate values get list from reverse foreign key

我有一個簡單的 model 之類的

class Author(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name



class Blog(models.Model):
    title = models.CharField(max_length=100)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)

這里我想用他們寫過的所有博客的標題查詢all authors like

Author One : [Blog One, Blog Two, Blog Three]

我想要這個來自查詢而不是循環

在這里我的方法是使用子查詢

blogs =Blog.objects.filter(author=OuterRef('pk')).values("title")
authors = Author.objects.annotate(blogs=Subquery(blogs), output_field=CharField())

但在這里我收到錯誤,例如sub-select returns 2 columns - expected 1

我怎樣才能得到所有作者和他們寫的所有博客? 我不想使用循環。 我想通過查詢

如果您使用postgres作為數據庫,則可以使用ArrayAgg function:

from django.contrib.postgres.aggregates import ArrayAgg

authors = Author.objects.annotate(blogs=ArrayAgg('blog_set__title'))

您可以查詢:

authors = Author.objects.prefetch_related('blog_set')

然后在模板中,你可以渲染:

<ul>
  {% for author in authors %}
    <li>{{ author }}</li>
    <ul>
      {% for blog in author.blog_set.all %}
        <li>{{ blog }}</li>
      {% endfor %}
    </ul>
  {% endfor %}
</ul>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM