Django-tables2: Permitir que colunas de classificação decrescente coloquem valores vazios na parte inferior da coluna

Criado em 2 ago. 2018  ·  6Comentários  ·  Fonte: jieter/django-tables2

Ao trabalhar com colunas descendentes em # 595 e # 597, me deparei com um comportamento de classificação descendente que parece um pouco estranho.

Considere um conjunto de dados como este:

| Registro | Valor |
| --- | --- |
| A | 3 |
| B | 1
| C | - |
| D | - |

Ao classificar a coluna Valor em ordem crescente, os valores vazios são colocados no final da lista:

| Registro | Valor |
| --- | --- |
| B | 1
| A | 3 |
| C | - |
| D | - |

Mas ao classificar em ordem decrescente, os valores vazios são colocados no topo da lista:

| Registro | Valor |
| --- | --- |
| C | - |
| D | - |
| A | 3 |
| B | 1

Em alguns casos, o usuário desejaria "ignorar" os valores vazios ao classificar em ordem decrescente e, assim, colocá-los no final da lista, da mesma forma que faria com o crescente. Isso pode ser feito?

Comentários muito úteis

Hah, bem, posso ter me convencido a não precisar de um RP. No meu caso de exemplo, o comportamento desejado pode ser alcançado usando o método order_FOO() e o parâmetro nulls_last do Django. Igual a:

def order_value(self, QuerySet, is_descending): if is_descending: QuerySet = QuerySet.order_by(F('value').desc(nulls_last = True)) else: QuerySet = QuerySet.order_by(F('value').asc(nulls_last = True)) return (QuerySet,True)

Isso resulta em valores nulos sempre sendo classificados no final da coluna. Isso funciona para os casos em que preciso, porque posso garantir que meu banco de dados sempre use nulo para valores vazios.

Testei essa solução para casos em que os valores estão simplesmente vazios e não funciona. Eu suspeito que uma solução poderia ser feita modificando algo dentro do comportamento de django-tables2 order_by , mas se estamos falando de um caso extremo de qualquer maneira, talvez o sort-with-nulls-last order_FOO() solução alternativa é melhor do que mexer com a fonte.

Em qualquer caso, posso considerar o meu pedido encerrado. Se outra pessoa clama por tratar os valores estritamente vazios da mesma maneira, talvez um RP possa ser revisitado.

Todos 6 comentários

Você viu # 529?

Oh, eu vejo agora. Hm, talvez eu possa dar uma olhada em fazer um PR para isso também.

Seria muito bem vindo!

Hah, bem, posso ter me convencido a não precisar de um RP. No meu caso de exemplo, o comportamento desejado pode ser alcançado usando o método order_FOO() e o parâmetro nulls_last do Django. Igual a:

def order_value(self, QuerySet, is_descending): if is_descending: QuerySet = QuerySet.order_by(F('value').desc(nulls_last = True)) else: QuerySet = QuerySet.order_by(F('value').asc(nulls_last = True)) return (QuerySet,True)

Isso resulta em valores nulos sempre sendo classificados no final da coluna. Isso funciona para os casos em que preciso, porque posso garantir que meu banco de dados sempre use nulo para valores vazios.

Testei essa solução para casos em que os valores estão simplesmente vazios e não funciona. Eu suspeito que uma solução poderia ser feita modificando algo dentro do comportamento de django-tables2 order_by , mas se estamos falando de um caso extremo de qualquer maneira, talvez o sort-with-nulls-last order_FOO() solução alternativa é melhor do que mexer com a fonte.

Em qualquer caso, posso considerar o meu pedido encerrado. Se outra pessoa clama por tratar os valores estritamente vazios da mesma maneira, talvez um RP possa ser revisitado.

Obrigado por explicar!

obrigado por esta boa solução alternativa @foldedpaper :)

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

mpasternak picture mpasternak  ·  9Comentários

applegrew picture applegrew  ·  17Comentários

blite picture blite  ·  3Comentários

brianmay picture brianmay  ·  6Comentários

wtfrank picture wtfrank  ·  32Comentários