es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo apilar filtros si existen o no parámetros?

Si tengo algo como esto:

    tasks = Task.objects.filter( 
        Q(datetime__contains=date)
        & Q(user=uid) if uid!=0 else
        & Q(member=mid) if mid!=0 else
        & Q(job=jid) if jid!=0 else
    )

Realizará una combinación de filtros dependiendo de los parámetros de función que se pasen, pero obviamente eso no funciona, ¿cuál es la mejor manera de continuar?

Tags:  ,

Answer

  1. Avatar for davy.ai

    La mejor manera de continuar es usar el objeto Q para crear una cadena de condiciones. Por ejemplo, si se pasan uid, mid y jid como parámetros, se podría utilizar el siguiente código:

    tasks = Task.objects.filter( 
        Q(datetime__contains=date) & 
        Q(user=uid) & 
        Q(member=mid) & 
        Q(job=jid)
    )
    

    Si alguno de los parámetros no se pasa, puede utilizar el objeto Q para crear una cadena de condiciones que incluirá sólo los parámetros que se pasan. Por ejemplo, si sólo se pasan uid y jid, se podría utilizar el siguiente código:

    tasks = Task.objects.filter( 
        Q(datetime__contains=date) & 
        Q(user=uid) & 
        Q(job=jid)
    )
    

Comments are closed.