Django-tables2: Permitir que las columnas de ordenación descendente coloquen valores vacíos en la parte inferior de la columna

Creado en 2 ago. 2018  ·  6Comentarios  ·  Fuente: jieter/django-tables2

Al trabajar con columnas descendentes en # 595 y # 597, encontré un comportamiento de ordenación descendente que parece un poco fuera de lugar.

Considere un conjunto de datos como este:

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

Al ordenar la columna Valor en orden ascendente, los valores vacíos se colocan al final de la lista:

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

Pero al ordenar en orden descendente, los valores vacíos se colocan en la parte superior de la lista:

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

En algunos casos, un usuario querría "ignorar" los valores vacíos al ordenar en orden descendente y, por lo tanto, empujarlos al final de la lista, al igual que con el orden ascendente. Se puede hacer esto?

Comentario más útil

Ja, bueno, puede que me haya convencido de la necesidad de un PR. En mi caso del ejemplo, el comportamiento deseado se puede lograr mediante el uso de la order_FOO() método y de Django nulls_last parámetro. Al igual que:

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)

Esto da como resultado que los valores nulos siempre se ordenen al final de la columna. Esto funciona para los casos en que lo necesito, porque puedo asegurarme de que mi base de datos siempre use nulo para valores vacíos.

Probé esta solución para casos en los que los valores simplemente están vacíos y no funciona. Sospecho que se podría hacer una solución modificando algo dentro del comportamiento de django-tables2 order_by , pero si estamos hablando de un caso de borde de todos modos, tal vez el sort-with-nulls-last order_FOO() solución alternativa es mejor que jugar con la fuente.

En cualquier caso, puedo considerar cerrada mi solicitud. Si alguien más clama por tratar los valores estrictamente vacíos de la misma manera, tal vez se pueda volver a visitar un RP.

Todos 6 comentarios

¿Viste el número 529?

Oh, lo veo ahora. Hm, tal vez pueda echarle un vistazo a hacer un PR para eso también.

¡Sería muy bienvenido!

Ja, bueno, puede que me haya convencido de la necesidad de un PR. En mi caso del ejemplo, el comportamiento deseado se puede lograr mediante el uso de la order_FOO() método y de Django nulls_last parámetro. Al igual que:

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)

Esto da como resultado que los valores nulos siempre se ordenen al final de la columna. Esto funciona para los casos en que lo necesito, porque puedo asegurarme de que mi base de datos siempre use nulo para valores vacíos.

Probé esta solución para casos en los que los valores simplemente están vacíos y no funciona. Sospecho que se podría hacer una solución modificando algo dentro del comportamiento de django-tables2 order_by , pero si estamos hablando de un caso de borde de todos modos, tal vez el sort-with-nulls-last order_FOO() solución alternativa es mejor que jugar con la fuente.

En cualquier caso, puedo considerar cerrada mi solicitud. Si alguien más clama por tratar los valores estrictamente vacíos de la misma manera, tal vez se pueda volver a visitar un RP.

¡Gracias por la explicación!

gracias por esta buena solución @foldedpaper :)

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

wtfrank picture wtfrank  ·  32Comentarios

applegrew picture applegrew  ·  17Comentarios

blite picture blite  ·  3Comentarios

brianmay picture brianmay  ·  6Comentarios

mpasternak picture mpasternak  ·  9Comentarios