queryset - orm para django
Cómo cambiar el comportamiento predeterminado de ordenamiento nulo de PostgreSQL en el Django ORM (1)
PostgreSQL considera por defecto los valores NULL como los más altos, y por lo tanto los ordena primero para las consultas descendentes y los últimos para los ascendentes.
Puede modificar este comportamiento por consulta o creación de índice especificando ''NULLS LAST'' o ''NULLS FIRST''.
¿Cómo puedo usar esto junto con el ORM de Django, sin la necesidad de utilizar consultas sin formato? Es decir, cuando agrego a mi query_set algo como qs.order_by("-publish_start")
, ¿cómo puedo especificar la ordenación de nulos? O, como alternativa, en declaración de campo / índice.
Descubrí una manera que acomoda los motores de DB que funcionan de cualquier manera (nulo como el valor más alto o más bajo) usando extra
, haciendo que la verificación nula sea booleana, y cuando se ordenan los booleanos false < true
parece ser universal:
qs = qs.extra(select={''null_start'': "publish_start is null"},
order_by=[''null_start'', ''-publish_start''])