Constructing Django filter queries dynamically with args and kwargs

后端 未结 3 1790
独厮守ぢ
独厮守ぢ 2020-12-12 23:54

I\'m constructing some Django filter queries dynamically, using this example:

kwargs = { \'deleted_datetime__isnull\': True }
args = ( Q( title__icontains =         


        
3条回答
  •  星月不相逢
    2020-12-13 00:13

    firstQ = [
        Q(...),
        Q(...),
        Q(...)
    ]
    import functools
    functools.reduce(lambda a, b: a & b, Qrelationship)
    

    Or in my case, I needed to AND to different sets of filters:

    firstQ = [
        Q(...),
        Q(...),
        Q(...)
    ]
    secondQ = [
        Q(...),
        Q(...),
        Q(...)
    ]
    import functools
    combined = functools.reduce(lambda a, b: a | b, [
        functools.reduce(lambda a, b: a & b, firstQ),
        functools.reduce(lambda a, b: a & b, secondQ)
    ])
    myqueryset = Model.objects.filter(combined)
    # Make sure you apply the Q's first (BEFORE any other filter) or it will fail silently
    

提交回复
热议问题