DjangoのQuerysetでNullや空文字をソートとする

DjangoのQuerysetでNullや空文字をソートとする

DjangoのQuerysetでソートしたときにNullの値を最後に持っていきたい場合のソート方法

from django.db.models import F  
Blog.objects.all().order_by(F('name').asc(nulls_last=True))
Blog.objects.all().order_by(F('name').desc(nulls_last=True))

Nullだけではなく空文字も最後に持っていきたい場合のソート方法

from django.db.models import IntegerField, Case, When, Value
Blog.objects.annotate(
    blank=Case(
        When(name=None, then=Value(3)),
        When(name='', then=Value(2)),
        default=Value(1),
        output_field=IntegerField()
    )
).order_by('blank', 'name')