动态对象过滤器

时间:2013-05-20 15:14:48

标签: python django

我有一个过滤查询,具体取决于搜索条件,

有时是:

Thing.object.filter(name__startswith=word).distinct('id')

有时候:

Thing.object.filter(city__startswith=word)

所以.filter(之后的所有内容都可以改变。有没有办法动态设置它?

2 个答案:

答案 0 :(得分:3)

.filter()的论据,是的。只需创建一个字典。

D = {'city__startswith': word}
things = Thing.object.filter(**D)

.distinct()的电话,没有。你需要特殊情况。

答案 1 :(得分:2)

如果'city'和'name'是条件选择器的值,您可以执行以下操作:

queryset = Thing.object.filter(**{'%s__startswith' % criteria: word})

if criteria_requires_distinct:
    queryset = queryset.distinct()