[英]Correct way to count for a foreign key model in Django template
class Author(models.Model):
name = models.CharField()
class Article(models.Model):
author = models.ForeignKey(Author)
假設我需要在模板中顯示有多少Articles
來自確定的作者。 這是視圖:
def myview(request):
context = {
'authors': Author.objects.all()
}
只需執行{{ author.Articles||length }}
就需要我編輯 Author 模型。 如果這是正確的方法(顯然不是),我應該在models.py
級別還是在視圖myview
執行此myview
?
我相信在models.py
中編輯模型會導致非常糟糕的代碼設計。
這樣做的myview
需要我做這樣的事情:
authors = []
for author in authors:
count = Article.objects.filter(author__exact=author).count()
authors.append(author, count)
horrendously_bad_code_design_context = {
'authors': authors,
}
這樣做的正確方法是什么? 我相信這兩種實現都非常糟糕且“hacky”。
如果您已經有一個檢索到的作者並且您想獲得文章計數,那么使用相關經理的count
方法( author.article_set.count()
)可能沒問題。
另一方面,如果您只是為了獲取計數而迭代(可能是大量的) Author
查詢集,它將執行大量查詢(一個用於檢索所有作者,每個作者一個用於獲取計數)。 這可以很容易地替換為一個帶注釋的查詢集,它只會產生一個查詢:
from django.db.models import Count
Author.objects.annotate(article_count=Count('articles'))
稍后在您的模板中,您可以只使用{{ author.article_count }}
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.