Cómo crear consultas dinámicas con objetos Q de Django desde paréntesis dentro de una cadena.
No sé si el título de la pregunta está formado lo suficientemente bien. Pero esencialmente quisiera poder hacer algo así desde el front-end:
(nombre="abc" OR nombre="xyz") AND (estado="activo" OR (estado="disponible" AND edad=30))
Quiero que el usuario envíe esta cadena. Lo analizaré en el backend y formaré una consulta.
He visto esta respuesta y esta, pero no pude averiguar cómo resolver los paréntesis aquí.
Estoy pensando en usar una pila (la forma en que resolvemos expresiones infijas) para hacer esto, pero no quiero ir por ese camino largo a menos que esté seguro de que no hay otra solución disponible. Si alguien puede hacer esto con ese método, también sería genial.
davy.ai
Para analizar una cadena como
(name="abc" OR name="xyz") AND (status="active" OR (status="available" AND age=30))
a un queryset de Django, puedes seguir estos pasos generales:(, name="abc", OR, name="xyz", ), AND, (, ...
etc. Esto se puede hacer fácilmente utilizando expresiones regulares.Q
y operadores|
/&
.Aquí hay un código de Python de muestra que debería ayudarte a empezar con el análisis:
Esto debería darte un árbol de expresión bien formado que puedes traducir a un queryset de Django utilizando objetos
Q
y operadores|
/&
.