Percebi que o django admin trata Sopa e sopa de forma diferente, teria alguma forma de tratar esses dados pra quando colocar "sopa", ou "SoPa" seja interpretado da mesma forma?
Percebi que o django admin trata Sopa e sopa de forma diferente, teria alguma forma de tratar esses dados pra quando colocar "sopa", ou "SoPa" seja interpretado da mesma forma?
Olá Weverton, tudo bem com você?
Peço desculpas pela demora em lhe responder.
Para que as palavras sopa e SoPa sejam reconhecidas no filtro por categoria (list_filter
) como uma única palavra será necessário criarmos uma classe que será responsável por coletar os nomes das categorias, e usando a função Lower
do Django criarmos uma nova lista com as categorias em minúsculo, assim no filtro não haverá duplicidade de categorias devido o uso de letras maiúsculas ou minúsculas em uma determinada palavras.
Os métodos lookups
e queryset
presente na classe CategoriaCaseInsensitive
irão substituir momentaneamente os métodos de busca padrão do Django, recebendo assim novas lógicas de busca e de apresentação de resultados.
No arquivo receitas/admin.py iremos adicionar nossa nova classe. Sendo declarada da seguinte forma.
from django.db.models.functions import Lower
from django.contrib.admin import SimpleListFilter
class CategoriaCaseInsensitive(SimpleListFilter):
title = 'categoria'
parameter_name = 'categoria'
def lookups(self, request, model_admin):
qs = model_admin.model.objects.all()
resultado = [i for i in qs.values_list('categoria').annotate(handle_lower=Lower("categoria")).distinct("handle_lower")]
return resultado
def queryset(self, request, queryset):
if self.value():
return queryset.filter(categoria__icontains=self.value())
A classe CategoriaCaseInsensitive
será usada como parâmetro para o filtro list_filter
da classe ListandoReceitas
, como declarado abaixo.
list_filter = (CategoriaCaseInsensitive,)
Nesse momento, o filtro por categoria do Django Admin, irá apresentar todas as categorias escritas em minúsculo, evitando a duplicidade.
Caso queira conhecer um pouco mais sobre a criação de filtros personalizados, deixo abaixo um link de referência para a documentação onde é explicado com detalhes sobre como realizar a criação dos filtros. A documentação está em inglês, caso tenha dificuldade com o idioma, recomendo o uso do tradutor do navegador.
Fico à disposição em caso de dúvidas.
Abraços e bons estudos.