Django 如何筛选字符串列表上的查询?

Django 如何筛选字符串列表上的查询?,django,django-models,keyword,Django,Django Models,Keyword,我有个小问题 我有一个模范人物和一个列表:fields=['firstname','age'] 现在,我想遍历字段列表并执行如下操作: people = Person.objects.all() #this is just to start people_filtered = people.filter(firstname__icontains='ohn') people.filter(f__icontains='ohn') Traceback (most recent call last)

我有个小问题

我有一个模范人物和一个列表:fields=['firstname','age']

现在,我想遍历字段列表并执行如下操作:

people = Person.objects.all() #this is just to start
people_filtered = people.filter(firstname__icontains='ohn')
people.filter(f__icontains='ohn')

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 667, in filter
    return self._filter_or_exclude(False, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 685, in _filter_or_exclude
    clone.query.add_q(Q(*args, **kwargs))
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/query.py", line 1259, in add_q
    can_reuse=used_aliases, force_having=force_having)
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/query.py", line 1127, in add_filter
process_extras=process_extras)
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/query.py", line 1325, in setup_joins
    "Choices are: %s" % (name, ", ".join(names)))
FieldError: Cannot resolve keyword 'f' into field. Choices are: age, firstname, id, lastname
我知道一种方法

f = Person._meta.get_field('firstname') 
这将返回一个字段的实例

<django.db.models.fields.CharField: firstname>

您所指的字符串列表是什么?潜在值列表或筛选器/参数列表

如果您希望关键字/过滤器是动态的,那么

key = '%s__icontains' % firstname

people.filter(**{key:'ohn'})
应该有用

如果希望值是动态的,那么这可能会起作用:

values = ['ohn', 'john', 'doe']

people.filter(firstname__icontains__in = values)

我不确定您是否可以像icontains和in这样链接sql函数,但也许您可以。我相信我们不是第一个想到这一点的人

谢谢!是的,我想筛选潜在值列表。这个解决方案非常有效。
values = ['ohn', 'john', 'doe']

people.filter(firstname__icontains__in = values)