Olá, tudo bem com você?
Peço desculpas pela demora em lhe responder.
Para adicionarmos a ordenação automática de um campo do tipo choices podemos criar um método customizado que irá ordenar os campos. No arquivo admin.py do projeto, acesse a classe responsável pelo registro dos campos presentes no modelo AtendimentoNegociacaoRefis no painel admin e adicione o seguinte o método get_queryset
a classe e adicione no topo do arquivo a importação das funções utilizadas.
from django.db.models import Case, When, IntegerField
class NegociacaoRefisAtendimento(admin.ModelAdmin):
list_display = ('id','negociacao_refis', 'etapa')
list_display_links = ('negociacao_refis', 'etapa' )
def get_queryset(self, request):
qs = super().get_queryset(request)
# 'Pendente','Aguardando análise', 'Homologado', 'Cancelado'.
return qs.annotate(
ordem = Case(
When(etapa=0, then=2),
When(etapa=1, then=1),
When(etapa=2, then=3),
When(etapa=3, then=4),
output_field=IntegerField()
)).order_by('ordem')
O método get_queryset
irá coletar e reatribuir os valores presentes no campo etapa
, definindo novos valores para esses campos e logo após realizando uma nova ordenação.
Após adicionar o parâmetro, salve os arquivos editados. Acesse o painel admin da aplicação e verifique a ordenação dos campos.
Caso queira, podemos também fazer o uso do parâmetro ordering
e informar que desejamos que a ordenação ocorra usando a coluna etapas
como referência. Para isso os valores dos campos presentes na constante CHOICES_ETAPAS
no arquivo models.py devem ser declarados com a ordenação necessária para a exibição, conforme apresentado abaixo.
CHOICES_ETAPAS = (
(0, 'Pendente'),
(1, 'Aguardando análise'),
(2, 'Homologado'),
(3, 'Cancelado'),)
No arquivo admin.py do projeto, acesse a classe responsável pelo registro dos campos presentes no modelo AtendimentoNegociacaoRefis no painel admin, e adicione o seguinte parâmetro a classe.
ordering = ('etapa',)
Exemplo de classe no arquivo admin.py
class NegociacaoRefisAtendimento(admin.ModelAdmin):
list_display = ('id','negociacao_refis', 'etapa')
list_display_links = ('negociacao_refis', 'etapa' )
# Adicionado ordenação usando o campo do tipo choices
ordering = ('etapa',)
admin.site.register(AtendimentoNegociacaoRefis, NegociacaoRefisAtendimento)
Após adicionar o parâmetro, salve os arquivos editados. Acesse o painel admin da aplicação e verifique a ordenação dos campos.
Espero ter ajudado, fico à disposição em caso de dúvidas.
Abraços e bons estudos.
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!