如何在django模板中过滤object_list

时间:2011-12-27 18:48:39

标签: django django-templates django-queryset

我有以下型号:

class CompanyReport(models.Model):
    company = models.CharField(max_length=300)
    desc = models.TextField()
    text = models.TextField()
    date = models.DateTimeField()
  • 有一组公司
  • 每家公司都有一个名为report
  • 的实体
  • 同一公司{/ 1}}中可以有多个reports

我想要做的是year菜单。

  1. 在第一级会有公司名称。
  2. 当我们点击名称时,会有一份公司提交报告的年份列表。
  3. 当我们点击特定年份时,会有一个当年所有报告的列表。
  4. 当我在multilevel dropdown工作时,我能够使用3个不同的查询来完成此任务。

    1. 第一个查询包含公司名称和提交报告的年数
    2. 第二个查询包含一年中特定公司的报告数
    3. 第三个查询包含按公司名称按升序排序的所有报告。
    4. 我刚刚运行了3个嵌套循环,1个用于公司数量,另一个用于该公司的年数,最后一个用于公司一年的报告数量,然后我只显示了下一个报告来自列表。

      我可以使用php执行相同操作,但我无法遍历模板中的对象,因为只有此操作可用Manager.raw。我需要两件事

      1. 前往{% for obejct in object_list %}
      2. 相当于这个php number based for loop,它只是从查询列表中获取下一个元组。
      3. 预期输出我想要显示的输出类型位于我上传的屏幕截图中。

        Dropdown List 非常感谢任何形式的帮助。

1 个答案:

答案 0 :(得分:4)

我不确定为什么你需要基于循环的数字。普通的迭代器是在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 %}