基本上我需要对每个条目评论进行计数:
SELECT e.*, COUNT(c.id) as comments FROM blog_entry e LEFT JOIN blog_comment c ON e.id = c.entry_id GROUP BY e.id, e.name, e.name_slug, e.date_published, e.category, e.image, e.body, e.is_published, e.views, e.subscription_sent ORDER BY e.date_published DESC LIMIT 15;
但我不知道如何使用Django来解决这个问题。
这是我到目前为止所做的,它完美无缺,除了没有评论数。有人能指出我使用Django进行这样的连接的正确方向吗?
from project.blog.models import Entry, Comment
def index(request):
latest_entry_list = Entry.objects.filter(is_published=True).order_by('-date_published')[:15]
return render_to_response('blog/index.html', {'latest_entry_list': latest_entry_list)
答案 0 :(得分:6)
django 1.1支持聚合查询,你可以通过svn trunk获取最后一个版本。 该文档已更新
答案 1 :(得分:2)
如果你没有使用trunk Django(因此不能使用新的聚合内容),你可以通过传递给extra()QuerySet参数的子选择来实现。 extra()的Django文档使用您尝试实现的示例(在选择标题下)here。
答案 2 :(得分:1)
如果没有聚合分支,您可以执行以下操作,返回2个元组的列表:
from project.blog.models import Entry, Comment
def index(request):
latest_entry_list = Entry.objects.filter(is_published=True).order_by('-date_published')[:15]
latest_entry_list_comment_count = [(x, x.count()) for x in latest_entry_list]
return render_to_response('blog/index.html', {
'latest_entry_list': latest_entry_list,
)
只需在模板中使用它:
{% for entry in latest_entry_list %}
Entry: {{entry.0}}
Comment count: {{entry.1}}
{% endif %}