私はカテゴリマネージャとプロジェクトマネージャの2つのモデルを持っています。他のマネージャからのオブジェクトを含む空でないレコードのモデルマネージャ
class PopulatedCategoriesManager(models.Manager):
def get_query_set(self):
return super(PopulatedCategoriesManager, self) \
.get_query_set() \
.filter(projects__is_published=True).distinct()
class Category(models.Model):
title = models.CharField(max_length=50)
class Meta(Orderable.Meta):
verbose_name_plural = 'Categories'
objects = models.Manager()
populated = PopulatedCategoriesManager()
class PublishedProjectsManager(models.Manager):
def get_query_set(self):
return super(PublishedProjectsManager, self) \
.get_query_set().filter(is_published=True)
class Project(models.Model):
title = models.CharField(max_length=50)
category = models.ForeignKey(Category, related_name='projects')
#other fields
objects = models.Manager()
published = PublishedProjectsManager()
PopulatedCategoriesManagerが公開されているプロジェクトを持っている唯一のカテゴリーを返し、期待通りに動作しますが、私の問題は、テンプレートレベルです。公開されたプロジェクトのみにアクセスするのに問題があります。
カテゴリインスタンスは、公開されたプロジェクトのみにアクセスする方法を知らないため、これらのオブジェクトを取得する最も効率的な方法は何かについて興味がありますか?私は書くことができるようにしてみたい
...
{% for category in categories %}
{% for project in category.published_projects.all %}
{% endfor %}
{% endfor %}
...各カテゴリのデータベース呼び出しを行うことはありません。誰かが私にいくつかのポインタを教えてもらえますか?私はこれを行うためにいくつかの未処理のSQLを書くことができ、私はanother Stack Overflow postからいくつかのアイデアを持っていますが、これをモデルレベルで解決したいと思います。
偉大な答えダニエル。私はselect_related()を追加し、再分類グループを非常に微妙に調整して{%カテゴリのカテゴリ別プロジェクト再編成}と、ビオラ1のSQLステートメントとすべての正しいプロジェクト:)あなたのお時間をありがとうございました。 – Brandon