質問

この質問はDjangoの集約/ 1.1の注釈に関するものです。私はそれに渡された「選択肢」のパラメータがありIntegerFieldとして単純なモデルがあるとします。示すように、このような場合には、性別タプルにマッピングされます。通常、テンプレート(またはビュー)にIはget_gender_display()関数を使用して、性別のテキスト値を参照することができます。

私は、以下のビューでそうであるように、私は男女数に注釈を付ける際に

しかし、私はその後get_gender_display()関数を使用して、各性別のためのテキスト値を検索することはできません。以下のテンプレートの抜粋を参照してください。どのように私は戻って男女のためのテキスト値を取得しに行くか?

私はので、多分、私は明白な解決策を欠けている、前にDjangoの集計を使用したことがありません。私の状況を考慮していただき、ありがとうございます。

models.py

GENDERS = (
  ('','    '),
  (1,'Female'),
  (2,'Male'),
)

class Subscriber(models.Model):
   gender = models.IntegerField(blank=True, null=True, choices=GENDERS)

views.py

from django.db.models import Count

def myview(request):
... 
    sum_gender = Subscriber.objects.values('gender').annotate(gender_sum=Count('gender')) 
    context = { 'sum_gender':sum_gender, }
    return render_to_response(template_name, context,context_instance=RequestContext(request)) 

テンプレート

...
{% for genderAndsum in sum_genders %}
  <div>{{ genderAndsum.get_gender_display }} {{ genderAndsum.gender_sum }}</div>
{% endfor %} 
...
役に立ちましたか?

解決

問題が集約ではない、それはあなたがvalues()を使用していることです。これはValuesQuerySetを返し、そのエントリのそれぞれが辞書である - ないSubscriberオブジェクト。もちろん、その辞書は、任意のget_FOO_displayメソッドを持っていません。

最速のソリューションは、カスタムフィルタを使用することです

from myapp.models import GENDERS

@register.filter
def gender_lookup(value)
    gender_dict = dict(GENDERS)
    return gender_dict.get(value, '')

テンプレートでます:

<div>{{ genderAndsum.gender|gender_lookup }} {{ genderAndsum.gender_sum }}</div>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top