2012-02-02 50 views
0

我有这样的代码:查询集:类型错误

>>> 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的代码。