سؤال

يتعلق هذا السؤال بتجميع Django / التوضيحية في 1.1. لنفترض أن لدي نموذج بسيط مع Integerfield الذي يحتوي على معلمة "اختيارات" مرت إليها. في هذه الحالة، فإنها خرائط لمجذور Tuple كما هو موضح. عادة، في قالب (أو عرض) يمكنني الرجوع إلى القيمة النصية للجنس باستخدام وظيفة 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)

وجهات النظر الاجتماعات

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(). وبعد يؤدي هذا إلى إرجاع القيم الذاتية، كل من إدخالاته عبارة عن قاموس - وليس كائن مشترك. من الواضح، أن 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