2011-01-31 28 views
1

models.py RegionとSurveyには2つのクラスがあります。調査にはregion_select=model.ForeignKey(region)があり、その他の属性と地域にはname=models.CharFieldがあります。 djangoの一般的なビューを使用して私はアイテム/地域のリストを作成し、それらのアイテムのフィルタリングされた数を持っていたいと思います。私のテンプレートは次のようになります。djangoテンプレートフィルタ:集計オブジェクト

<..> 
    <ul> 
     {% for Region in regions_list %} 
      <p><b>{{ Region }}</b> <i>(count: {{ ??? }})</i><br> 
      {% for Survey in object_list %} 
       {% if Survey.region_select = Region %} 
        <a href="{% url region-display Region.id %}">{{ Survey }}</a> 
       {% endif %} 
      </p> 
      {% endfor %} 
     {% endfor %} 
    </ul> 
<..> 

region_listは、私は地域ごとに個別にそれらの項目をカウントするのにこれまでのところ、私は完璧なリストを取得するには、オブジェクトリストと同じRegion.objects.all() のクエリセット(Survey.objects.all()) です。 私はobject_list.filter(region_select=Region).countを試しましたが、フィルターに何かを書き込むと、テンプレートにエラーが発生し、フィルターに渡すものを解析できないというメッセージが表示されました。 ???に行くのは何ですか?カスタム{{name | filter}}フィルタはどうでしょうか?再びオブジェクトを数える必要がある...ああ、私も同じメソッドを追加しようとしましたSurvey.objects.filter(region_select=Region).countしかし、それらのオブジェクト(?!?)の場所と型を書くことに終わった。

P.S.それはコピー/ペーストではないので、簡単なミスが書き直し中に発生している可能性があります。

答えて

3

試してみてください。私はそれだけでは、クエリセットを与えていることを指示する方法であると思ったので

Region.survey_set.all.count 
+0

、私はobjectName_set部分を意味する、私はドキュメントに_set見てきましたが、それはこれを自動的に行います。 – JackLeo

+0

調査モデルで 'region_select = model.ForeignKey(Region)'を定義すると、djangoはRegionモデルに 'survey_set'を自動的に追加します。 'region.survey_set'は' Survey.objects.filter(region_select = region) 'と等しくなります。もちろん、同様の機能を実現するためにカスタムタグを使うこともできますが、model_setの方がよりdjangoishです。そしてbtwではテンプレートはテンプレートを直接表示することができませんでした。なぜなら、テンプレートは物事を表示するだけであり、そこにはビジネスロジックがあってはならないからです。 – adieu

+0

はいこれらの逆リレーションシップは、 'related_name'引数で名前を上書きしないかぎり、自動的に作成されます。 –