Ho trovato un modo per ospitare motori DB che funzionano in entrambi i modi (null come valore più alto o più basso) usando extra
, rendendo il controllo null un booleano e quando si ordinano i booleani false < true
sembra essere universale:
qs = qs.extra(select={'null_start': "publish_start is null"},
order_by=['null_start', '-publish_start'])