Using Q object with variable

1.5k views Asked by At

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.

1

There are 1 answers

3
willeM_ Van Onsem On BEST ANSWER

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:

Obj.objects.filter(Q(('%s__icontains' % field_name, 'sth')))

this is probably the most convenient way. That being said the dictionary unpacking, although less elegant, should also work.