2015年5月

对Queryset进行查找、过滤时使用动态的字段名

对Queryset进行查找和过滤是Django中最常见的操作之一,不过一般情况下是对已经确定的字段进行查找或是过滤,例如:

Entry.objects.get(id=123)
# 或是更复杂一点,用到lookup type
Entry.objects.get(headline__contains='Lennon')
在这样的查询中,idheadline都是已经确定的字段。

如果想要动态地指字被查询的字段,可以像这样做:

kwargs = {
    '{0}__{1}'.format('name', 'startswith'): 'A',
    '{0}__{1}'.format('name', 'endswith'): 'Z'
}
Person.objects.filter(**kwargs)
“这在Python中是非常普通和常用的技巧。”1