Джанго: Как отменить поиск с помощью фильтра и считать

В моем шаблоне я хочу получить количество всех ответов на вопрос, где Answer.Value = "YES"

У меня есть две модели:

class Question(models.Model):
    question = models.CharField(max_length=100)

class Answer(models.Model):
    question = models.ForeignKey(Question)
    value = models.CharField(max_length=3)

Мой взгляд:

def questn(request, question_id):
    qobj = Question.objects.select_related().get(id="1")
    return render(request, 'base.html', {'qobj': qobj})

Мой шаблон (base.html):

{{ qobj.answer_set.count }} //returns total count of all answers
{{ qobj.answer_set.filter(value="Yes").count }} //breaks my page...

Как правильно подсчитать все ответы "Да" на этот вопрос?

2 ответа

Решение

Django построен так, что вы должны поставить логику на ваш взгляд. Шаблон не должен содержать "продвинутую логику".

Сделайте запрос в представлении, отправьте результаты в шаблон.

    return render(request, 'base.html', {'qobj': qobj, 'yes_count': qobj.answer_set.filter(value="Yes").count()})

Шаблон:

{{ yes_count }}

Вы также можете написать собственный шаблонный фильтр или использовать метод модели для достижения желаемого эффекта, я думаю, что это был бы путь "Djangoist".

Документация по написанию собственных шаблонов тегов и фильтров:

https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

Пример по связанному вопросу:

/questions/23459288/sistema-shablonov-django-vyizyivayuschaya-funktsiyu-vnutri-modeli/23459297#23459297

Ваш вопрос в значительной степени дублирует этот:

система шаблонов django, вызывающая функцию внутри модели

Другие вопросы по тегам