2012-02-02 13 views
0

私はこのコードを持っている:クエリセット:例外TypeError

>>> d = HotelCheck.objects.filter(client=1,date_booked='2012-02-27').distinct('product').values('product')['product_id'] 
>>> d 
[{'product': 6}, {'product': 1}] 

をそして私はちょうど出力は16になりたいです。

だから私はこの試みた:

>>> d = HotelCheck.objects.filter(client=1,date_booked='2012-02-27').distinct('product').values('product')['product_id'] 

をしかし、私はこのエラーを得た:

Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 153, in __getitem__ 
    raise TypeError 
TypeError 

誰もが、私は唯一の値を示すことができる方法上の任意のアイデアを持っています(61を)のをproduct

答えて

4

あなたはvalues_listを探しています。 flat引数を渡すと、製品IDのリストが直接取得されます。 ValuesQuerySetはスライスまたは整数インデックスのみ可能であるため、検索が失敗しています。

MyModel.objects.values_list('product', flat=True) 
# Out: [6, 1] # this is a ValuesQuerySet that behaves like a list 
1
[x['product'] for x in d] 

[6、1]を指定する必要があります。

0

あなたは辞書のリストを取得していますが、辞書自体は戻っていません。したがって、必要なものを蓄積するためにそれらを繰り返す必要があります - したがって、John Zwinckのコード。