I'd like to use the django.db.models.Q object in a way that the query term is coming from a variable.
What i'd like to achieve is identical to this:
q = Q(some_field__icontains='sth')
Obj.objects.filter(q)
, but the some_field value should come from a variable:
field_name='some_field'
q = Q('%s__icontains=sth' % field_name)
Obj.objects.filter(q)
, but this solution does not give me the correct result of course.
I also tried to use dictionary this way:
dt = {'%s__icontains' % field_name: 'sth'}
q = Q(**dt)
Obj.objects.filter(q)
, but this also fails on the result.
How could I use the Q object using variables as query term?
Thanks.
You can pass a 2-tuple to a
Q
object with the name of the fieldname(s) and lookups as first item, and the value as second item:this is probably the most convenient way. That being said the dictionary unpacking, although less elegant, should also work.