Django字段值未显示在模板中

时间:2015-08-21 21:45:50

标签: django

我有以下查询,但当我在模板中循环时,它不会显示名称字段值。

views.py

hashtags = PhotoHashtag.objects.values('hashtag__name')\
    .filter(hashtag__hashtagtype_id=3)\
    .annotate(total_photos=Count('photo_id'))\
    .order_by('-total_photos')

models.py

class PhotoHashtag(TimeStampedModel):
    photo = models.ForeignKey('posts.Photo')
    hashtag = models.ForeignKey('hashtags.Hashtag')

class Hashtag(TimeStampedModel):
    hashtagtype = models.ForeignKey('hashtags.HashtagType')

    name = models.CharField(max_length=250, unique=True)

模板

{% for hashtag in hashtags %}
   <li>({{ hashtag.name }}) ({{ hashtag.total_photos }})</li>
{% endfor %}

sql result

enter image description here

的HTML

  • ()(5)

  • ()(2)

如您所见,它显示的是total_photos值,但不显示名称值

2 个答案:

答案 0 :(得分:2)

您没有Hashtag对象的查询集。您有一个使用PhotoHashtag模型创建的ValuesQuerySet,其中包含两个字段hashtag__nametotal_photos

答案 1 :(得分:1)

QuerySet.values返回类似字典的对象ValuesQuerySet。这就是你可以过滤它的原因。

{{ hashtag.total_photos }}的工作原因是因为'total_photos'是生成的ValuesQuerySet对象中的关键字。其中的其他键有'hashtag__name''total_photos'。如果你使用像Jinja2这样的东西,你可以用点符号直接访问它们,或者像在dict对象中一样。

要做到这一点,只需用你的内容替换它:

{% for hashtag in hashtags %}
    <li>({{ hashtag.hashtag__name }}) ({{ hashtag.total_photos }})</li>
{% endfor %}