[django] 장고 values_list 대 값

Django에서 다음 두 가지의 차이점은 무엇입니까?

Article.objects.values_list('comment_id', flat=True).distinct()

vs

Article.objects.values('comment_id').distinct()

내 목표는 각 아래에 고유 한 주석 ID 목록을 얻는 것입니다 Article. 설명서를 읽었으며 실제로 두 가지 방법을 모두 사용했습니다. 결과는 명백하게 비슷해 보인다.



답변

values()메소드는 사전을 포함하는 QuerySet을 리턴합니다.

<QuerySet [{'comment_id': 1}, {'comment_id': 2}]>

values_list()메소드는 튜플을 포함하는 QuerySet을 리턴합니다.

<QuerySet [(1,), (2,)]>

values_list()단일 필드와 함께 사용 하는 경우 flat=True1- 튜플 대신 단일 값의 QuerySet을 반환하는 데 사용할 수 있습니다 .

<QuerySet [1, 2]>


답변

값 ()

dictionariesiterable로 사용될 때 모델 인스턴스 대신 을 반환하는 QuerySet을 반환합니다 .

values_list ()

list of tuplesiterable로 사용될 때 모델 인스턴스 대신 을 반환하는 QuerySet을 반환합니다 .

뚜렷한()

독특한 eliminate the duplicate요소 에 사용됩니다 .

예:

Article.objects.values_list('id', flat=True) # flat=True will remove the tuples and return the list   
[1, 2, 3, 4, 5, 6]

Article.objects.values('id')
[{'id':1}, {'id':2}, {'id':3}, {'id':4}, {'id':5}, {'id':6}]


답변

다음과 같이 다른 값을 얻을 수 있습니다.

set(Article.objects.values_list('comment_id', flat=True))


답변