django 집계 GET _*_ 디스플레이 기능 사용량
-
18-09-2019 - |
문제
이 질문은 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>
제휴하지 않습니다 StackOverflow