【问题标题】:How to store multipe queryset results in a list, then display values in template如何将多个查询集结果存储在列表中,然后在模板中显示值
【发布时间】:2017-08-01 21:58:24
【问题描述】:

我想将过滤后的查询集存储在一个列表中,然后在我的模板中迭代该列表。

我的模型中有一个租户列表,如下所示:

class Tenant(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    telephone = models.CharField(max_length=30)
    email = models.CharField(max_length=30)
    contract_end = models.DateField(blank=False)

    def __str__(self):
        return u'%s %s' % (self.first_name, self.last_name)

像这样查看:

def expiry(request):
    now = datetime.datetime.now()
    tenant_queryset = Tenant.objects.all()
    expired_list = []

    for x in range(0, 12):
        date = now + relativedelta(months=x)
        expired = tenant_queryset.filter(
            contract_end__year=date.year,
            contract_end__month=date.month
            )
        expired_list.append(expired)

context = {"expired_list": expired_list}

return render(request, "expired_template.html", context)

模板:

{% for tenant in expired_list %}
{{ tenant.first_name }}<br>
{{ tenant.telephone }}<br>
{{ tenant.contract_end }}<br>
{% endfor %}

在我看来,我使用 for 循环来遍历一年中的几个月,然后将这些结果存储在一个列表中。

我似乎无法在我的模板中显示 tenant.first_name、tenant.last_name、tenant.telephone 和 tenant.contract_end 值。我猜这是因为我已经将过滤后的查询集的结果输出到一个列表中,并且它会显示这些结果而不是“参考”,如果这有意义的话。

我该怎么办?

感谢您的帮助。

【问题讨论】:

  • 如果以下答案解决了您的问题,请将其标记为已接受。这是 StackOverflow 中的一个很好的做法。

标签: django django-templates django-views


【解决方案1】:

那是因为您每次都在 expired_listQuerySet 中附加。

append 更改为:

expired_list += expired

这样,你终于得到了一个统一的(扁平化的)QuerySet(列表)。

Python(非常简单)示例:

list_1 = []
list_2 = [1, 2, 3]
list_1.append(list_2)
print(list_1)  # [[1, 2, 3]]

list_1 = []
list_2 = [1, 2, 3]
list_1 += list_2
print(list_1)  # [1, 2, 3]

【讨论】:

  • 我成功了!谢谢您的帮助。认为我将不得不阅读 python 中 append、+= 和 i = i + 1 之间的差异。我现在试图按每个月对我的所有结果进行分组。我想出了一个解决方案,我可以为每个月创建一个列表并填充每个列表,但似乎有点冗长。
  • 很高兴我能帮上忙。请把答案标记为正确,所以这个问题已经解决了!
  • 在这种情况下,您应该提出一个新问题,以便其他人(以及您将来)可以更有效地搜索!
  • 没问题!很高兴我能帮上忙!
猜你喜欢
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
  • 1970-01-01
  • 2013-09-01
  • 2011-07-02
  • 2016-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多