모델 정렬 커스텀하기
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 부여
→ 커스텀 속성을 오름차순으로 정렬