Descubrí una forma que se adapta a los motores de base de datos que funcionan de cualquier manera (null como valor más alto o más bajo) usando extra
, haciendo que la verificación nula sea booleana, y al ordenar booleanos false < true
parece ser universal:
qs = qs.extra(select={'null_start': "publish_start is null"},
order_by=['null_start', '-publish_start'])