Django values_list vs values
В Django, какая разница между двумя следующими:
Article.objects.values_list('comment_id', flat=True).distinct()
vs
Article.objects.values('comment_id').distinct()
Моя цель - получить список уникальных идентификаторов комментариев под каждым Article
. Я прочитал документацию (и фактически использовал оба подхода). Результаты явно кажутся похожими.
Ответы
Ответ 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}]