J'ai trouvé un moyen qui s'adapte aux moteurs de base de données qui fonctionnent dans les deux sens (null comme valeur la plus élevée ou la plus basse) en utilisant extra
, en faisant de la vérification null un booléen, et lors du tri des booléens false < true
semble être universel :
qs = qs.extra(select={'null_start': "publish_start is null"},
order_by=['null_start', '-publish_start'])