使用带变量的 Q 对象

Using Q object with variable

我想以查询词来自变量的方式使用 django.db.models.Q 对象。

我想要实现的与此相同:

q = Q(some_field__icontains='sth')
Obj.objects.filter(q)

,但是 some_field 值应该来自一个变量:

field_name='some_field'
q = Q('%s__icontains=sth' % field_name)
Obj.objects.filter(q)

,但是这个解决方案当然没有给我正确的结果。

我也试过这样用字典:

dt = {'%s__icontains' % field_name: 'sth'}
q = Q(**dt)
Obj.objects.filter(q)

,但这在结果上也失败了。

如何使用变量作为查询词来使用 Q 对象?

谢谢。

您可以将 2 元组传递给 Q 对象,其中字段名和查找的名称作为第一项,值作为第二项:

Obj.objects.filter(<b>Q(('%s__icontains' % field_name, 'sth'))</b>)

这可能是最方便的方式。话虽如此,字典解包虽然不太优雅,但也应该有效。