use*_*805 6 python django django-q
我想以查询项来自变量的方式使用 django.db.models.Q 对象。
我想要实现的目标与此相同:
q = Q(some_field__icontains='sth')
Obj.objects.filter(q)
Run Code Online (Sandbox Code Playgroud)
,但 some_field 值应该来自变量:
field_name='some_field'
q = Q('%s__icontains=sth' % field_name)
Obj.objects.filter(q)
Run Code Online (Sandbox Code Playgroud)
,但是这个解决方案当然不会给我正确的结果。
我也尝试这样使用字典:
dt = {'%s__icontains' % field_name: 'sth'}
q = Q(**dt)
Obj.objects.filter(q)
Run Code Online (Sandbox Code Playgroud)
,但这在结果上也失败了。
如何使用变量作为查询项来使用 Q 对象?
谢谢。
您可以将 2 元组传递给Q对象,其中字段名称和查找的名称作为第一项,值作为第二项:
Obj.objects.filter(Q(('%s__icontains' % field_name, 'sth')))Run Code Online (Sandbox Code Playgroud)
这可能是最方便的方法。话虽这么说,字典解包虽然不太优雅,但也应该可以工作。
| 归档时间: |
|
| 查看次数: |
1478 次 |
| 最近记录: |