簡體   English   中英

在 Django 模板中計算外鍵模型的正確方法

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

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