Как отфильтровать объектный список в шаблоне Django - PullRequest
1 голос
/ 27 декабря 2011

У меня есть следующая модель:

class CompanyReport(models.Model):
    company = models.CharField(max_length=300)
    desc = models.TextField()
    text = models.TextField()
    date = models.DateTimeField()
  • Существует набор компаний
  • В каждой компании есть субъект, называемый report
  • Можетбыть кратным reports в year для одной и той же компании

Я хочу сделать multilevel dropdown меню.

  1. На первом уровнетам будут названия компании.
  2. Когда мы нажимаем на название, появляется список лет, за которые компания подала отчеты.
  3. Когда мы нажимаем на конкретный год, там будетбыть списком всех отчетов за этот год.

Когда я работал в php, я мог сделать это, используя 3 разных запроса.

  1. Первыйзапрос содержал название компаний и количество лет, в течение которых они подавали отчет
  2. Второй запрос содержал количество отчетов для конкретной компании в год
  3. Третий запрос содержал все отсортированные отчетыпо названию компании в порядке возрастания.

Я только что побежал 3 neцикл sted, 1 для числа компаний, другой для количества лет для этой компании и последний для количества отчетов для компании за год, а затем я просто отобразил следующий отчет из списка.

Я могу сделать то же самое, используя Manager.raw, но я не могу перебирать объекты в шаблоне, потому что доступна только эта операция {% for obejct in object_list %}.Мне нужны две вещи

  1. Путь к number based for loop
  2. Эквивалент этого php $row = mysql_fetch_array($query);, который просто получает следующий кортеж из списка запросов.

Ожидаемый вывод Тип вывода, который я хочу показать, представлен на скриншоте, который я загрузил.

Dropdown List Любая помощь очень важна.

1 Ответ

4 голосов
/ 27 декабря 2011

Я не совсем уверен, зачем вам нужен номер, основанный на цикле. Обычный итератор - это правильный способ сделать цикл в Python.

Если по какой-то причине вам нужен индекс во время цикла, вы должны использовать: {{forloop.counter}} для счетчика с одним индексом или {{forloop.counter0}} для счетчика с нулевым индексом.

Ваш синтаксис будет выглядеть примерно так:

{% for company in company_list %}
    {{ company.company }}
    {% for company_year in company_year_list %}
        {% if company.date == company_year.date %} #note: this is pseudocode. you need a better comparison
            {{ company_year.date }}
            {% for company_report in company_report_list %}
                {% if company_report.company == company and company_report.year = company_year.date %}
                    {{ company_report.report }}
                {% endif %}
             {% endfor %}
         {% endif %}
     {% endfor %}
 {% endfor %}
...