Djangoは集約取得_ * _表示機能の使用法
-
18-09-2019 - |
質問
この質問は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>
所属していません StackOverflow