私は同様のモデルがあります:テンプレートでDjango querysetサブセットとカスタムマネージャー?
class BaseInfo(models.Model):
is_active = models.BooleanField(default=True)
# other fields..
class Meta:
abstract = True
class Customer(BaseInfo):
name = models.CharField(max_length=50)
## other fields..
を私は、このモデルのテーブルを表示したいが、私は、非アクティブなものを強調したいです。だから私はこの断片をテンプレートに持っています:
{% for c in customers %}
<tr {%if not c.is_active %}class="not-active" {%endif%}>
<td>..</td>
</tr>
{% endfor %}
ここで、これの横にアクティブなものを表示します。
all = Customer.objects.filter(name="foo")
excludeInactive = all.filter(is_active=False)
をし、コンテキストの両方に合格: 私はビューでこれを行うことができます。 しかし、私は、テンプレート内でこのようなものを好むだろう:
{{customers.exclude_deleted.count}}
または多分: {{customers.exclude_deleted|length}}
を?
私はこの抽象クラスを継承するより多くのモデルを持っています。基本クラスのマネージャーがうまくいくと思いますか?私はちょうど1つを書く方法を理解できませんでした..
また、パフォーマンスについてはどうですか? .filter()
を2回呼び出しても、2番目のクエリは既に評価済みのクエリセットのサブセットであっても、2つのdbクエリが実行されますか?
カスタムテンプレートタグをご覧ください –
この目的のためにカスタムマネージャを調べることができます。 – karthikr