2011-10-04 62 views
0

DB表的Django使查詢

select * from AAA; 
id | Name  | Class | Grade | 
-------------------------------------- 
1 |  john |  1 | A  | 
2 |  Jane |  2 | B  | 
3 |  Joon |  2 | A  | 
4 |  Josh |  3 | C  | 

|

代碼

Django 
search_result = AAA.objects.filter(Grade = 'B').count() 
print search_result 

search_result - > 2

我想按值等級改變上課。

Django 
target_filter = 'Class' 
search_result = AAA.objects.filter(__"target_filter..."__ = '3').count() 

search_result - > 1

Q)我怎樣才能完成這個代碼?可能嗎?

回答

0

您可以通過將kwargs直接

target_filter = 'Class' 
search_result = AAA.objects.filter(**{target_filter:3}).count() 
縮短aeby的榜樣
1

也許你可以做這樣的:

target_filter = 'Class' 
filter_args = {target_filter: 3} 
search_result = AAA.objects.filter(**filter_args).count() 
0

這是不知何故,我給here同樣的答案。您也可以使用getattr,但現在使用模塊對象本身。如果它是相同的模塊,那麼它可以是__module__,也可以是import編輯的模塊。

target_filter = 'Class' 
search_result = AAA.objects.filter(getattr(__module__, target_filter) = '3').count() 

編輯:我聽錯了,這是不可能通過__module__訪問當前模塊。如果該類是在與您的搜索相同的模塊中聲明的,則可以使用globals()[target_filter]來訪問它。如果您的搜索是從另一個模塊,你可以做這樣的:

import somemodule 

... 

target_filter = 'Class' 
search_result = AAA.objects.filter(getattr(somemodule, target_filter) = '3').count()