首页 > 解决方案 > 通过Django模板中的其他对象值访问对象值?

问题描述

{{ category.id }} 返回我 1

{{ categories_counts.1 }}会返回我的数据

但是{{ categories_counts.category.id }}不起作用?

是否可以通过其他对象值访问值?

视图.py:

categories = Category.objects.all()
categories_counts = {}
for category in categories:
    count = Venue.objects.filter(category_id=category.id).count()
    categories_counts[category.id] = count

所以categories包含:

<QuerySet [<Category: restaurants>, <Category: sportfitness>, <Category: carservices>, <Category: beautysalons>]>

categories_counts包含:

{1: 1, 2: 0, 3: 0}

类别型号:

class Category(models.Model):
    name = models.CharField(max_length=20)
    bg_name = models.CharField(max_length=20, default=None)
    category_bg_name = models.CharField(max_length=100, default=None)

标签: pythondjangotemplates

解决方案


通常,除非您创建自定义模板标签,否则您无法categories_counts[category.id]在 Django 模板中访问,正如@sayse 在评论中所说。

在您的特定情况下,您可以使用地点计数来注释查询集。

from django.db.models import Count
categories = Category.objects.annotate(num_venues=Count('venue'))

然后在您的模板中,您可以执行以下操作:

{% for category in categories %}
{{ category.name }} has {{ category.num_venues }} venue(s)
{% endfor %}

推荐阅读