[英]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.