반응형

장고 ORM, 같은 그룹에서 특정 필드 값 기준 추출 

 

글. 수알치 오상문

 

과제가 여러 개 존재하고 과제는 여러 버전으로 관리된다고 가정합니다. 

 

[Plan 테이블]

id   assinment_id   plan_version   update_date

1           1                        1.0          2022-01-01

2           2                        1.0          2022-01-05

3           1                        2.0          2022-01-05

4           3                        1.0          2022-01-08

5           2                        2.0          2022-01-10

6           1                        3.0          2022-01-10

 

위 테이블에서 아래처럼 같은 과제인 경우 가장 상위 버전만 가져오고 싶은 경우입니다.

 

[원하는 결과]

id   assinment_id   plan_version   update_date

4           3                        1.0          2022-01-08

5           2                        2.0          2022-01-10

6           1                        3.0          2022-01-10

 

 

# 먼저 과제로 정렬하면서 버전도 정렬합니다.

data_list = Plan.objects.order_by('-assignment_id', '-plan_version')

 
# 중복 과제는 가장 첫 번째(가장 상위 버전)만 남깁니다.
data_list2 = [ ]   # 결과를 담은 리스트

 

if len(data_list):  # 작업 대상이 존재하면...
    v1 = data_list[0].assignment     # 첫 로우 정보
    data_list2.append(data_list[0])   # 첫 로우 정보는 무조건 저장
               
    for data in data_list[1:]:  # 두 번째부터 비교 작업 진행
        if data.assignment != v1:  # 이전 과제와 다르면 진행 (같은 과제는 무시함)
            v1 = data.assignment  # 현재 선택한 과제 
            data_list2.append(data)  # 로우 정보 저장 
 
이렇게 진행하면 원하는 결과를 얻을 수 있습니다.
리스트에 저장된 것은 쿼리 객체이므로 orm 기능이나 템플릿에서도 접근 가능합니다.
 
 
 
반응형

+ Recent posts