[Django] 특정 리스트에 순서에 맞게 order_by(id 순서대로 정렬)

2023. 10. 10. 08:39Python/Django

이슈 상황

  • 데이터베이스 쿼리는 반드시 사용자가 제공한 순서대로 가 아니라 데이터베이스에서 찾은 순서대로 개체를 반환한다.
  • 조건으로 넣은 리스트 순서에 따라서 조회가 되게 하려면, 특정 리스트에 순서에 맞게 order_by를 하는 작업이 필요하다.
  • 예시
    • id 리스트 [1, 3, 2]를 넣으면 [object(1), object(3), object(2)] 순서로 조회가 되게 하는 경우이다.

 

Example code

  • id_list의 1, 3, 2 순서대로 order_by를 진행
id_list = [1, 3, 2]
objects = Model.objects.filter(id__in=id_list).order_by(
    Case(*[When(id=id, then=pos) for pos, id in enumerate(id_list)])
)

 

'Python > Django' 카테고리의 다른 글

[Django] Django model on_delete 종류  (0) 2023.12.20
simple history 이력 확인  (0) 2023.10.16
Versioning decorator  (0) 2023.08.21
[Django] SerializerMethodField  (0) 2023.06.19
Django PhoneNumberField, phonenumbers  (0) 2023.04.26