Как получить количество объектов / элементов (внешний ключ) в шаблоне - PullRequest
0 голосов
/ 17 июня 2011

как получить количество ответов на вопрос

class Answers(models.Model):
    ...
    question = models.ForeignKey(Question, related_name='Question')

, когда я

return render_to_response('profile.xhtml',
                      {'questions': Question.objects.filter(author=details_profile),},
                      context_instance=RequestContext(request))

и в шаблоне я хочу получить количество ответов на каждый вопрос ({{q.answer.count}} это просто пример)

{% for q in questions %}
    {{ q.title }}, Answers: {{ q.answer.count }}
{% endfor %}

nvm, который я просто делаю в models.py

class Question(models.Model):
    ...
    def count_it(self):
        return Answers.objects.filter(question=self).count()

и использую в шаблоне {{q.count_it}}

Ответы [ 2 ]

1 голос
/ 17 июня 2011

Если бы вы не установили related_name='Question', вы могли бы получить счет в шаблоне следующим образом:

{{ q.answer_set.count }}

... потому что "answer_set" является значением по умолчанию related_name. Как есть, вы должны быть в состоянии использовать:

{{ q.Question.count }}

Но это безобразно! Надеюсь, вы уже поняли, что related_name - это имя, которое вы хотите использовать для обозначения назад к текущей модели из модели, на которую вы ссылаетесь в своем ForeignKey. Так что лучшим вариантом будет что-то вроде:

class Answers(models.Model):
    ...
    question = models.ForeignKey(Question, related_name='answers')

и затем в шаблоне:

{% for q in questions %}
    {{ q.title }}, Answers: {{ q.answers.count }}
{% endfor %}
0 голосов
/ 17 июня 2011
{% for q in questions %}
    {{ q.title }}, Answers: {{ q.Question|length }}
{% endfor %}

Я бы порекомендовал изменить там ваше имя на что-то вроде «ответы» или что-то в этом роде.

...