Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using Q object with variable

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.

like image 386
user2194805 Avatar asked Jun 21 '26 18:06

user2194805


1 Answers

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.

like image 181
Willem Van Onsem Avatar answered Jun 23 '26 07:06

Willem Van Onsem



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!