Django的聚合得到_ * _显示功能的使用
-
18-09-2019 - |
题
此问题涉及Django的聚合/注释在1.1。假设我有与具有传递给它一个“选择”参数的IntegerField一个简单的模型。在这种情况下,将其映射到元组的性别,如图所示。通常,在模板(或视图)我可以通过使用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,它的每个条目是一本字典 - 不是一个用户对象。显然,字典不具有任何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