문제

이 질문은 1.1의 Django 집합/주석과 관련이 있습니다. "선택"매개 변수가 전달 된 정수 필드가있는 간단한 모델이 있다고 가정합니다. 이 경우 표시된대로 성별 튜플에 맵핑됩니다. 일반적으로 템플릿 (또는보기)에서 get_gender_display () 함수를 사용하여 성별의 텍스트 값을 참조 할 수 있습니다.

그러나 아래보기에서와 같이 성별 계수에 주석을 달 때 get_gender_display () 함수를 사용하여 각 성별의 텍스트 값을 조회 할 수 없습니다. 아래에서 발췌 한 템플릿을 참조하십시오. 성별에 대한 텍스트 가치를 얻는 방법은 무엇입니까?

나는 전에 Django Aggregation을 사용한 적이 없으므로 명백한 해결책이 없을 수도 있습니다. 내 상황을 고려해 주셔서 감사합니다.

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을 반환합니다. 각 항목은 가입자 객체가 아닌 사전입니다. 분명히, 그 dict에는 아무것도 없습니다 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