2017-03-14 2 views
0

前へ続くQuestiondict.keyがTemplateでは値を返しますが、ビューではないのはなぜですか

は、私は、テンプレート内のキーを通じて価値を得ることができますクエリセットを持っていますが、私は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_idを取得しようとしているので、ユーザーのリストを取得して、テンプレートに情報を表示するために使用できます。

なぜそれがテンプレートで動作し、ビューでは動作しないのか理由を探しています。

また、user_idではなくuserオブジェクトを返すクエリの代替を探します。ありがとう、

答えて

1

辞書なので、r.get('user')またはr['user']をする必要があります。 Djangoはちょうどdot notationをテンプレートに使用しています。

+0

これを結果として得ることができますか? ' ... '応答していただきありがとうございます。 –

+0

私は確信していませんが、私の本能はないと言うことです - 'values()'は 'dict'を返すだけです。通常の 'QuerySet'だけでなく、' values() 'を使っている理由はありますか?それがあなたの望むものだと思えば、あなたは 'r.user.email'、' r.user.first_name'などをすることができます。 –

+0

それは可能だとは思えませんでした。私は 'filter'を使うことを考えましたが、' filter'が条件を必要とするため、これは不可能です。上の場合の条件は何ですか?私は 'all()'について考えましたが、すべてではなく、別個のユーザーの平均を得る方法を理解できませんでした。 –

関連する問題