[Ajuda] -> Obter dados do tipo string com acentos na primeira letra no DB e ordenar

100 views
Skip to first unread message

Elder Trevisan

unread,
Jun 16, 2016, 3:17:27 PM6/16/16
to Django Brasil
Olá pessoal!
Eu estou pegando vários dados no banco e estes dados são palavras, porém em algumas delas a primeira letra tem acento. Meu problema é que preciso exibi-las em ordem alfabética, mas as que iniciam com acento acabam ficando no final da relação. Alguém poderia me ajudar a resolver esta questão?

cond = Condominium.objects.all().order_by('name_condominium')

Exemplo da saída >> Avalon, Flamboyant, Jatibaia, Águas da Serra...

André Luiz

unread,
Jun 16, 2016, 3:21:15 PM6/16/16
to django...@googlegroups.com
Isso costuma a ser característica do banco de dados e não do Django, recomendo dar uma olhada como o banco que você está usando lida com isso.

--
Você recebeu essa mensagem porque está inscrito no grupo "Django Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para django-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Elder Trevisan

unread,
Jun 16, 2016, 3:23:20 PM6/16/16
to Django Brasil
Estou usando SqLite. Fazendo alguns testes, percebi que isso ocorre na função sort() do Python também.

Henr"Ikke" Pereira

unread,
Jun 16, 2016, 3:23:34 PM6/16/16
to django...@googlegroups.com
Oi Elder,

Não sei qual teu banco, cada banco gerencia isso de uma maneira diferente.

Talvez se você converter pra lower ele já considere as letras acentudas iguais as letras não acentuadas...

from django.db.models.functions import Lower
cond = Condominium.objects.all().order_by(Lower('name_condominium'))

--
Você recebeu essa mensagem porque está inscrito no grupo "Django Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para django-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--
Henrique G.G. Pereira - "Ikke"
+55 (55) 9619-7499

André Luiz

unread,
Jun 16, 2016, 3:34:47 PM6/16/16
to django...@googlegroups.com
Sim, é o comportamento padrão, tanto no Python quanto no SQLite você consegue ordenar "ensinando" eles a lidar com isso.

No Python você pode fazer isso manipulando locale


E no SQLite usando um collation que ignore acentos nas operações.


Não sei se você considerou trazer os dados do banco e ordenar no Python, por questões de performance não recomendaria isso. tente configurar o collation.

Elder Trevisan

unread,
Jun 16, 2016, 3:35:44 PM6/16/16
to Django Brasil, ikk...@gmail.com
Henrique, eu testei da forma como você sugeriu e não funcionou.

Felipe Prenholato

unread,
Jun 17, 2016, 1:39:02 PM6/17/16
to Django Users BR
Elder, se vc quiser fazer isso de uma maneira que não importa o banco tu pode normalizar o nome usando o unidecode:

>>> from unidecode import unidecode
>>> 
print unidecode(u'háááááééô') 
haaaaaeeo

Guarde isso em um campo do tipo slug por exemplo, indexe e busque por ele ;).


Reply all
Reply to author
Forward
0 new messages