Django查询:另一个计数问题

时间:2011-04-05 10:13:00

标签: python django templates django-templates

您好,我似乎遇到了一些涉及Django计数的问题。我有一个显示其最新状态的项目列表。所有这些状态为“已销毁”的项目都已删除。这打印得很好。

  status_items = models.StorageItem.objects.filter(client=client_id, itemstatushistory__isnull=False).distinct()

{% for item in status_items %}
        {{item.itemstatushistory_set.latest|cut:"Destroyed"}}
{% endfor %}

但我不能指望某些原因。

  status_items = models.StorageItem.objects.filter(client=client_id, itemstatushistory__isnull=False).distinct().count()

TypeError while rendering: 'int' object is not iterable

3 个答案:

答案 0 :(得分:2)

status_items = models.StorageItem.objects
                     .filter(client=client_id, itemstatushistory__isnull=False)
                     .distinct().count()

status_items将包含项目数 - >一个int对象

{% for item in status_items %}的模板中使用它显然会产生错误。

你可以在没有count()的情况下离开它,并在模板中访问计数,如下所示:

{{ status_items.count }}

模板系统会为您调用status_items.count()。更多信息:rendering-a-context

编辑:

  

@ Shehzad009 :我想要实现的目标是   统计所有最新的项目   地位没有被破坏。因为   一对多的关系,因为   我想算一下最新的状态   对于每个项目,它有点棘手

您可以像这样定义status_items

#storageItems where itemstatushistory__status != 'Destroyed'
storage_items = models.StorageItem.objects
                .filter(client=client_id,
                        itemstatushistory__isnull=False
                        )
                .distinct()

# list of items with latest status != 'Destroyed'
status_items = [item for item in storage_items 
                if item.itemstatushistory_set.latest().description !='Destroyed']

# list of items with latest status not in ['Destroyed', 'Out']
status_items = [item for item in storage_items
                if item.itemstatushistory_set.latest().description
                   not in ['Destroyed', 'Out']]

然后在模板中:

{# show items with latest status != destroyed  #}
{% for item in status_items %}
        {{ item }}
{% endfor %}

{# items with latest status != destroyed count #}
{{ status_items|length }}

答案 1 :(得分:0)

status_items = models.StorageItem.objects.filter(client=client_id, itemstatushistory__isnull=False).distinct().count()
{% for item in status_items %}
        {{item.itemstatushistory_set.latest|cut:"Destroyed"}}
{% endfor %}

您已将status_items设置为整数,因此您无法执行for item in status_items

你想要达到什么目标?

答案 2 :(得分:0)

你在哪个版本的Django上?

也许你可以考虑使用如聚合和其他QuerySet子句下所述的注释语法:

http://docs.djangoproject.com/en/dev/topics/db/aggregation/#aggregations-and-other-queryset-clauses