4 Stimmen

Verwendung der Django-Aggregationsfunktion get_*_display

Diese Frage bezieht sich auf Django Aggregation/Annotation in 1.1. Angenommen, ich habe ein einfaches Modell mit einem IntegerField, das einen "choices"-Parameter hat, der ihm übergeben wird. In diesem Fall wird es auf ein GENDERS-Tupel wie gezeigt abgebildet. Normalerweise kann ich in einer Vorlage (oder Ansicht) auf den textuellen Wert des Geschlechts verweisen, indem ich die Funktion get_gender_display() verwende.

Wenn ich jedoch die Anzahl der Geschlechter mit Anmerkungen versehe, wie ich es in der folgenden Ansicht tue, kann ich nicht mit der Funktion get_gender_display() den Textwert für jedes Geschlecht nachschlagen. Siehe den Auszug aus der Vorlage unten. Wie würde ich vorgehen, um den Textwert für das Geschlecht zurückzubekommen?

Ich habe noch nie Django Aggregation verwendet, also vielleicht übersehe ich eine offensichtliche Lösung. Danke, dass Sie meine Situation berücksichtigt haben.

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)) 

Vorlage

...
{% for genderAndsum in sum_genders %}
  <div>{{ genderAndsum.get_gender_display }} {{ genderAndsum.gender_sum }}</div>
{% endfor %} 
...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X