2011-05-05 36 views
3

如何在运行时指定任意的Django查询过滤器?在运行时指定Django查询过滤器

我们通常使用的过滤器是这样的...

query_set = MyModel.objects.filter(name__iexact='foobar') 

但如果我有字符串中包含查询过滤器符?

query_specifier = "name_iexact='foobar'" 
query_set = MyModel.objects.filter(query_specifier) # <-- This doesn't work; How can I do this? 
+0

这也关系:http://stackoverflow.com/questions/310732/in-django-how-does-one-filter-a-queryset-with-dynamic-field-lookups – 2011-05-05 21:47:17

回答

9
query_specifier = { 
    'name__iexact': 'foobar' 
} 
query_set = MyModel.objects.filter(**query_specifier) 
+0

哈哈,duhhh。我没有直截了当地想。谢谢! – 2011-05-05 20:11:39

+0

这是可行的,因为Django *是* python,并且** query_specifier将被解压缩。这里有一篇关于kwargs的相关文章:http://stackoverflow.com/questions/1769403/understanding-kwargs-in-python – zeekay 2011-05-05 20:14:09