Получение количества отфильтрованного результата в шаблоне на Django

#django

#django

Вопрос:

Я пытаюсь получить доступ к связанной модели в шаблоне следующим образом:

 course.course_set.all.0.section_set.all.0.student_assignation.count
  

Проблема в том, что я хотел бы подсчитать все назначения учащихся, которые имеют active = True свойство.

Я хотел бы иметь возможность сделать что-то вроде этого:

 course.course_set.all.0.section_set.all.0.student_assignation(active=True).count
  

Как я могу выполнить это в шаблоне django?

Ответ №1:

Шаблоны Django не предназначены для таких сложных запросов. Есть несколько способов справиться с этим

Во-первых, создайте пользовательский тег шаблона django

Во-вторых, создайте метод класса, который будет предоставлять эту информацию.

Пример

 class Course:
    ...
    def sutdent_assign_count(self):
        #Your query goes here..
  

Комментарии:

1. Создание пользовательского фильтра шаблона для простого добавления также .filter(active=true) должно работать.

2. Конечно, но это привело бы к разделению логики и большему количеству ошибок в коде, если только это не повторяющийся шаблон

3. Другой вариант — использовать метод all_active() в пользовательском менеджере. Но я думаю, нам нужно больше знать о том, что он пытается сделать.

4. Я думал о менеджере. Но проблема в том, что я не всегда хочу, чтобы применялся фильтр. если я создам student_assign_count(self): , как предложил karthikr, как мне создать запрос для фильтрации на основе текущего набора запросов?

5. Я не думаю, что вам это нужно для каждого набора запросов. Вам это нужно для каждого объекта. Пример: course.course_set.first().section_set.first().student_assignation(active=True).count() — Конечно, для этого могут потребоваться изменения, но вы поняли идею

Ответ №2:

У вас слишком много логики в шаблоне. Создайте метод в одном из ваших классов моделей, который фактически возвращает нужное вам число; Я бы предложил один, но слишком неясно, что вы делаете (почему .all.0 , разве другие результаты не важны? Почему course.course_set, это много для многих для себя?). На что похожи ваши модели?

Как бы вы описали то, что вы отображаете на английском языке? Это, вероятно, дает подсказку о том, какой метод вы должны создать.