BOMBOLOM.COM

(django) Order_by usando case insensitive

Por José Lopes

Este artigo mostra como ordenar uma QuerySet usando case insensitive.

No Django, quando utilizamos o método order_by numa QuerySet o resultado é case sensitive por defeito e não existe nenhuma opção para mudar isto.

Para garantir que o resultado é case insensitive podemos usar o método extra, criando um atributo adicional que utilize o campo do modelo em causa juntamente com a função LOWER ou UPPER do SQL, e depois ordenar por este atributo:

MeuModel.objects.all().extra(select={'minha_ordem':'LOWER(campo_do_modelo)'}).order_by('minha_ordem')

As funções LOWER e UPPER do SQL estão disponíveis na maiorida das base de dados como podemos constatar no Wikibook SQL dialects reference (em inglês).

É claro que esta solução pode ser utilizada em qualquer QuerySet, eu só usei o método all para simplificar.

Na minha opinião esta é uma boa solução. Pode ser utilizada em qualquer campo do modelo e não polui a base de dados com informação desnecessária (como seria o caso se fosse criado um campo adicional, utilizando um custom manager ou o método save do modelo, para ser utilizado somente pelo order_by). Esta solução também evita a configuração da base de dados para garantir o mesmo resultado.

18.06.2009 | Ler mais | Comentários | Tags ,

Voltar à Página principal | Made with PyBlosxom