我想獲取某些對象的ID。什麼是讓他們成爲元組的乾淨方式?獲取字段查詢值的元組
一個.values()查詢集返回此:
MyModel.objects.filter(name__startwith='A').values('id')
>>>> [{'id': 20L}, {'id': 21L}, {'id': 84L}]
,我想變換/讓他們到像一個元組:
(20L, 21L, 84L)
我想獲取某些對象的ID。什麼是讓他們成爲元組的乾淨方式?獲取字段查詢值的元組
一個.values()查詢集返回此:
MyModel.objects.filter(name__startwith='A').values('id')
>>>> [{'id': 20L}, {'id': 21L}, {'id': 84L}]
,我想變換/讓他們到像一個元組:
(20L, 21L, 84L)
最簡單的解決方案是ge噸values_list
flat=True
與
models.MyModel.objects.all().values_list('id', flat=True)
這類似於值()除了代替返回字典,當遍歷它返回的元組。每個元組包含傳遞給values_list()調用的相應字段的值 - 因此第一個項目是第一個字段等。
如果您只傳入單個字段,則還可以傳遞flat參數。如果爲True,這將意味着返回的結果是單個值,而不是一元組。一個例子應該使差異更清晰:
什麼發電機體現在哪裏?
tuple(d['id'] for d in MyModel.objects.filter(name__startwith='A').values('id'))
或者:
import operator
tuple(map(lambda x: operator.getitem(x, 'id'), MyModel.objects.filter(name__startwith='A').values('id'))
或者,因爲這是出於某種原因刪除的回答表明,你可以這樣做:
tuple(object.id for object in MyModel.objects.filter(name__startwith='A'))
或者:
import operator
getter = operator.attrgetter('id')
tpl = tuple(map(getter, MyModel.objects.filter(name__startwith='A')))
謝謝它看起來不錯,但它不適用於MySQL(錯誤提出:「此版本的MySQL尚不支持'LIMIT&IN/ALL/ANY/SOME子查詢'「) – bux
你的問題沒有這個限制,對不起 – oleg
你說得對,我搞錯了:p – bux