django进行查询

时间:2011-10-04 09:03:10

标签: python django

DB TABLE

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

我想通过VALUE将成绩更改为班级。

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

search_result - > 1

问)如何填写此代码?有可能吗?

3 个答案:

答案 0 :(得分:1)

也许你可以这样做:

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

答案 1 :(得分: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() 来访问它。如果您的搜索来自其他模块,您可以这样做:

{{1}}

答案 2 :(得分:0)

你可以通过直接放置kwargs来缩短aeby的例子

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