如何在Django模板中过滤一个对象列表

6 浏览
0 Comments

如何在Django模板中过滤一个对象列表

我有以下的模型:

class CompanyReport(models.Model):
    company = models.CharField(max_length=300)
    desc = models.TextField()
    text = models.TextField()
    date = models.DateTimeField()

  • 有一组公司
  • 每个公司都有一个名为report的实体
  • 对于同一家公司,可以在同一年内有多个report

我想做的是制作一个多级下拉菜单。

  1. 第一级将显示公司的名称。
  2. 当我们点击一个名称时,将显示该公司提交报告的年份列表。
  3. 当我们点击特定的年份时,将显示该年份所有报告的列表。

当我在php中工作时,我可以使用3个不同的查询来实现这一点。

  1. 第一个查询包含公司的名称和提交报告的年份数量
  2. 第二个查询包含特定公司在一年中提交的报告数量
  3. 第三个查询按公司名称升序排列所有报告。

我只需运行3个嵌套循环,一个用于公司数量,另一个用于该公司的年数,最后一个用于公司在一年中的报告数量,然后我只需显示列表中的下一个报告。

我可以使用Manager.raw做同样的事情,但我无法在模板中迭代对象,因为只有这个操作可用{% for obejct in object_list %}。我需要两件事情:

  1. 获得一个基于数字的循环的方法
  2. 一个与此php语句等效的方法$row = mysql_fetch_array($query);,它只是从查询列表中获取下一个元组。

期望的输出我希望展示的输出类型如我上传的屏幕截图所示。

Dropdown List

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

0
0 Comments

在Django模板中如何过滤一个对象列表的问题出现的原因是,用户想要根据不同的属性对对象列表进行过滤和组合显示。解决方法是使用嵌套循环来遍历不同的列表,并使用条件语句进行过滤。

首先,用户需要使用for循环来遍历公司列表company_list,并输出每个公司的名称。然后,用户需要在嵌套的循环中遍历年份列表company_year_list,并使用条件语句if company.date == company_year.date来判断公司的日期与年份的日期是否匹配。如果匹配,则用户需要在第三个嵌套循环中遍历报告列表company_report_list,并使用条件语句if company_report.company == company and company_report.year = company_year.date来判断公司和年份是否与报告匹配。如果匹配,则输出报告内容。

解决方法中还提到了一种更优化的方法,即使用基于计数的for循环来获取每个公司每年的报告数量。然后,用户可以使用之前的列表来遍历所有的报告,并且可以通过计数来获取公司、年份和记录数量。

另外,解决方法中还提到了使用extra来执行原始查询的方法,以及在模板中使用嵌套循环的效率问题。最后,用户还提到了在视图中返回包含公司、年份和报告的嵌套列表的需求,并建议用户提供示例输入和输出来更好地理解问题。

总之,该问题的原因是用户想要根据不同的属性对对象列表进行过滤和组合显示,解决方法是使用嵌套循环和条件语句来实现过滤和组合的功能。

0