0

などは知ってobject.poll_set.countいますが、これらをフィルタリングするにはどうすればよいので、poll_set の一部のオブジェクトのカウントのみを取得します。のようなものを意味しますobject.poll_set.filter(pk<20).count。プレゼンテーションではなくロジックで行う必要があると思いますが、どのように行うのが望ましいですか?

また、いくつかのオブジェクトの「ネストされた数」を見つける必要があります。3 つのモデル (モデル 1、モデル 2、モデル 3) があります。モデル 3 にはモデル 2 への FK があり、モデル 2 にはモデル 1 への FK があります。モデル 1 では、モデル 1 を参照するモデル 2 からレコード数を取得できますが、モデル 3 からのレコード数も必要です。モデル 1 の特定のオブジェクトを参照するモデル 2 の任意のオブジェクトを参照します。

モデル 1 のオブジェクトを ListView に出力します。モデル 1 の任意のオブジェクトを参照するモデル 2 のレコードの総数、つまり、各オブジェクトで見つかったオブジェクトの総数を取得するにはどうすればよいですか。テンプレートのループでこれを数えて、に出力する必要があり<tfoot>ますか?

4

1 に答える 1

0

正しい構文はobject.poll_set.filter(pk__lt=20).count(). Django は__lte__iexactなどの値を比較するために特別な名前を使用します。https://docs.djangoproject.com/en/1.5/ref/models/querysets/#field-lookupsを参照してください。これは、最初のバージョンから Django に含まれています。

不要なデータベース ルックアップが多数発生する可能性があるため、ループ内をカウントしないでください。したがって、Model1 (親)、Model2 (子) の 2 つのモデルがあり、すべての Model1 を Model2 の数だけ表示したい場合は、次のようにします。Model1.objects.filter(whatever).annotate(model2_count=Count('model2'))

編集:カスタムカウント機能がどこにあるべきかを明確にする

ビューは次のようになります。

ビュー.py

def model1_list(request):
  objects = Model1.objects.all().annotate(model2_count=Count('model2'))
  return TemplateResponse(request, 'your_template.html', {'objects':objects})

そしてあなたのテンプレート「your_template.html」:

{% for o in objects %}
  <b>{{ o }}</b> - model2s: {{ o.model2_count }} <br/>
{% endfor %}
于 2013-04-29T07:27:32.087 に答える