django 쿼리셋 중복제거 distinct() 안됨

파오리·2021년 2월 26일
0

아주 작은 에러

목록 보기
5/5

문제 상황: objects.all()을 불러와 그 안에서 하나의 필드에 대해 중복을 제거하기 위해 .distinct()를 했으나 적용이 안됨

현재상황

# django models.py

from .models import Status

def status(request):
    status = Status.objects.all().order_by('-id')
    status_kind = status.value_list('kind', flat=True).distinct()

Status 테이블 안의 데이터에서 kind필드의 값들을 중복제거하여 리스트로 만들고자 하였으나, 적용이 되지 않았다.

*참고:
쿼리셋.values('필드이름') : 해당 필드와 값들을 딕셔너리로 제공
쿼리셋.value_list('필드이름') : 해당 필드의 값들을 튜플로 제공
쿼리셋.value_list('필드이름', flat=True) : 해당 필드의 값들을 리스트로 제공

해결

# django models.py

from .models import Status

def status(request):
    status = Status.objects.all().order_by('-kind')
    status_kind = status.value_list('kind', flat=True).distinct()

하거나,

# django models.py

from .models import Status

def status(request):
    status = Status.objects.all()
    status_kind = status.value_list('kind', flat=True).distinct().order_by('-kind')

를 해야 한다.

.distinct()order_by가 적용된 필드에 한해서만 된다.

성공~

profile
경험 == 배움

0개의 댓글