Django 如何筛选字符串列表上的查询?
我有个小问题 我有一个模范人物和一个列表:fields=['firstname','age'] 现在,我想遍历字段列表并执行如下操作: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)
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)