我有以下查询,但当我在模板中循环时,它不会显示名称字段值。
hashtags = PhotoHashtag.objects.values('hashtag__name')\
.filter(hashtag__hashtagtype_id=3)\
.annotate(total_photos=Count('photo_id'))\
.order_by('-total_photos')
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 %}
()(5)
()(2)
如您所见,它显示的是total_photos值,但不显示名称值
答案 0 :(得分:2)
您没有Hashtag对象的查询集。您有一个使用PhotoHashtag模型创建的ValuesQuerySet,其中包含两个字段hashtag__name
和total_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 %}