JREAM
JREAM

Reputation: 5931

Django Filter Loop OR

Does anyone know how I get Django Filter build an OR statement? I'm not sure if I have to use the Q object or not, I thought I need some type of OR pipe but this doesn't seem right:

    filter_mfr_method = request.GET.getlist('filter_mfr_method')
    for m in filter_mfr_method:
        designs = designs.filter(Q(mfr_method = m) | m if m else '')
        # Or should I do it this way?
        #designs = designs.filter(mfr_method = m | m if m else '')

I would like this to be:

SELECT * FROM table WHERE mfr_method = 1 OR mfr_method = 2 OR mfr_method = 3

EDIT: Here is what Worked

    filter_mfr_method = request.GET.getlist('filter_mfr_method')
    list = []
    for m in filter_mfr_method:
        list.append(Q(mfr_method = m))

    designs = designs.filter(reduce(operator.or_, list))

Upvotes: 2

Views: 685

Answers (2)

Mp0int
Mp0int

Reputation: 18727

Something I used before:

qry = None
for val in request.GET.getlist('filter_mfr_method'):
    v = {'mfr_method': val}
    q = Q(**v)
    if qry: 
        qry = qry | q
    else: 
        qry = q

designs = designs.filter(qry)

That is taken from one of my query builders.

Upvotes: 1

Ngenator
Ngenator

Reputation: 11259

What about:

import operator 

filter_mfr_method = request.GET.getlist('filter_mfr_method')
filter_params = reduce(operator.or_, filter_mfr_method, Q())
designs = designs.filter(filter_params)

Upvotes: 1

Related Questions