Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django dynamic OR queries

I have a MultipleChoiceField on a form holding car makes. I want to filter my database of cars to the makes that were checked but this causes a problem. How do I get all the Q(make=...) statements in dynamically?

How I start: ['value1', 'value2', ...]

How I want to end: Q(col='value1') | Q(col='value2') | ...

I've couple of other methods. I've tried appending querysets for each make and doing it the other way around (doing multiple excludes) but they were both really slow.

like image 885
Oli Avatar asked Dec 14 '22 05:12

Oli


2 Answers

Have you tried: Model.objects.filter(make__in=list_of_makes) ?

The list_of_makes is what is returned by the MultipleChoiceField

See the query set reference about the __in operator.

like image 117
Ber Avatar answered Jan 02 '23 12:01

Ber


There was another method provided in #django:

reduce(lambda x,y: x | y, [Q1, Q2, Q3, ...])

Ber's method is great for this instance but if you need to filter on dynamic columns, mapping looks like the next cleanest way.

like image 24
Oli Avatar answered Jan 02 '23 12:01

Oli