2011-12-27 13 views

Respuesta

13

Usted puede hacer esto con django-like:

MyModel.objects.filter(field__like='10%8%0%') 

También me crea un ticket relacionado en la Django project site

+0

Lo siento, olvidé aclarar lo que quiero que hacer. Ver mi EDIT –

+0

Esto funciona, pero como iba a buscar '% query%', decidí usar field__contains – radtek

+0

Esto es más flexible que __contains, ¿por qué no se incluyó en Django de forma predeterminada? se debe agregar en django y no reemplazar __contains. –

5

La manera más fácil de hacer la búsqueda que tiene la intención de hacer es por medio de la expresión:

MyModel.objects.filter(field__regex=r'^10..8..0..$') 

Editar:

Mi solución es posiblemente mucho más lento de lo similares. El problema es que el django ORM no permite un fácil acceso al LIKE. Sería más fácil si startswith o endswith fueran suficientes para sus propósitos.

+0

Es mucho más lento que 'LIKE', al menos para MySQL. – DrTyrsa

+0

Esto funciona, pero no es tan eficiente como gustar. ¿Por qué no existe algo como esto? MyModel.objects.filter (field__like = '10% 8 & 0% '). Si el ORM no escapa de la cadena, puede hacer esto: MyModel.objects.filter (field = '10% 8 & 0% ') – Goin

+0

@DrTyrsa es mucho más lento, pero también es su solución o_O. Su solución después de la solución Till-Backhaus – Goin

-1

En SQL, puede consultar siente:

WHERE field LIKE '10??8??0??' 

Trate de que en el filtro de Django.

+0

Esto es imposible con las búsquedas predeterminadas en django. Por lo tanto, implemento django-like http://pypi.python.org/pypi/django-like – Goin

4

Puede utilizar extra para hacer esto:

MyModel.objects.extra(where=["column_name LIKE '%10%"]) 

Tenga en cuenta que column_name es el nombre de la columna en la base de datos, en lugar del nombre del campo en el modelo de Django. En muchos casos, el nombre del campo y el nombre de la columna serán los mismos, pero si difieren, tenga cuidado de usar el nombre de la columna.

Cuestiones relacionadas