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=True
1- 튜플 대신 단일 값의 QuerySet을 반환하는 데 사용할 수 있습니다 .
<QuerySet [1, 2]>
답변
값 ()
dictionaries
iterable로 사용될 때 모델 인스턴스 대신 을 반환하는 QuerySet을 반환합니다 .
values_list ()
list of tuples
iterable로 사용될 때 모델 인스턴스 대신 을 반환하는 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))