Подтвердить что ты не робот

Django values_list vs values

В Django, какая разница между двумя следующими:

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

vs

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

Моя цель - получить список уникальных идентификаторов комментариев под каждым Article. Я прочитал документацию (и фактически использовал оба подхода). Результаты явно кажутся похожими.

4b9b3361

Ответ 1

Метод values() возвращает список словарей:

[{'comment_id': 1}, {'comment_id': 2}]

Метод values_list() возвращает список кортежей:

[(1,), (2,)]

Если вы используете values_list() с одним полем, вы можете использовать flat=True для возврата списка, а не списка кортежей.

[1, 2]

Ответ 2

значения()

Возвращает QuerySet, который возвращает dictionaries, а не экземпляры модели, при использовании в качестве итерабельного.

values_list()

Возвращает QuerySet, который возвращает list of tuples, а не экземпляры модели, когда используется как итеративный.

различны()

Разные

используются для 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}]