django.models의 case when을 사용하여 원하는 case에 새로운 속성의 값으로 정수를 부여하여 이 커스텀 속성을 정렬시켜 커스텀 정렬을 할 수 있다.

models.Case(models.When(조건, then=커스텀속성에 부여할 값) )

queryset = Profile.objects.filter(user__is_staff=1).exclude(user__id=3) \
            .annotate(custom_order=
        models.Case(
            models.When(depart='마케팅팀', then=models.Value(0)),
            models.When(depart__contains='지점', then=models.Value(1)),
            default=models.Value(2),
            output_field=models.IntegerField())) \
            .order_by('custom_order', 'depart', 'id')

  • 부서가 ‘마케팅팀 - 지점 - 나머지’ 순서로 정렬을 하려한다.
    → annotate를 사용하여 커스텀 속성(custom_order)을 만든다.
    → 마케팅팀에게 정수 0 부여
    → 지점이 포함된 속성에게 정수 1 부여
    → 그외의 속성에게 정수 2 부여
    → 커스텀 속성을 오름차순으로 정렬