为什么dict.key在Template中返回值而在Views中不返回值

时间:2017-03-14 01:40:04

标签: python django django-templates

继续之前的Question

我有一个查询集,我可以通过模板中的键获取值,但如果我在Views.py中尝试相同的步骤,我会得到:

'dict' object has no attribute 'user'

我的查询是:

rate = foo.objects.values('user').distinct().annotate(r=Avg("rate"), r1= Avg("rate1"), r2= Avg("rate2")).annotate(a = F('r')+F('r1')+F('r2')).order_by('a')[:5]

以上查询返回:

<QuerySet [{'user': 18, 'r': 2.0, 'r1': 2.0, 'a': 10.0, 'r2': 2.0}, {'user': 16, 'r': 1.0, 'r1': 5.0, 'a': 15.0, 'r2': 4.0}, {'user': 17, 'r': 4.333333333333333, 'r1': 5.0, 'a': 20.833333333333332, 'r2': 4.833333333333333}]>

在模板中,如果我这样做,它将返回user_id:

{% for r in rate %}
    {{ r.user }}
{% endfor %}

但如果我在视图中做类似的话:

for r in rate:
    foo = r.user

我会得到一个'dict'对象没有属性'user'。

我的目标是获取用户对象,因此我尝试获取user_id并通过它获取用户列表,以便我可以使用它们在模板中显示信息。

寻找原因,为什么它在模板中工作,而不是在视图中。

还要查找返回用户对象的查询的替代方法,而不是user_id。谢谢,

1 个答案:

答案 0 :(得分:1)

因为它是字典,所以您必须r.get('user')r['user']。 Django只在模板中使用dot notation