estoy poniendo en práctica un simple búsqueda como en mi sitio web Django y lo que yo uso actualmente es el siguiente código:Django SQL OR vía filtro() y Q(): ¿Dinámico?
from django.db.models import Q
posts = Post.objects.filter(Q(title__icontains=query)|Q(content__icontains=query))
Dónde query
es una cadena. Esto da como resultado una declaración SQL LIKE
y funciona bastante bien. Ahora también me gustaría dividir mi consulta de búsqueda en términos o palabras:
words = query.split(' ')
Así words
ahora contiene una lista de palabras, y me gustaría conseguir una sentencia SQL similar a:
SELECT ... FROM foo WHERE `title` ILIKE '%word1%' OR `title` ILIKE '%word2%'
OR `content` ILIKE '%word1%' OR `content` ILIKE '%word2%'
Y en caso de que haya más de dos palabras, me gustaría que la declaración crezca enumerando todas las entradas por cada palabra.
¿Alguna idea? ¡Gracias!
No olvides sanitizar tus consultas o estarás en la misma situación que la escuela de Boby Table. –
¿qué hay de usar la búsqueda de texto completo con djapian? – Ski
@the_drow: Django (o más correctamente, DB-API) se ocupa de eso ya. –