В Django, в чем разница между следующими двумя:
Article.objects.values_list('comment_id', flat=True).distinct()
против
Article.objects.values('comment_id').distinct()
Моя цель - получить список уникальных идентификаторов комментариев под каждым Article
. Я прочитал документацию (и фактически использовал оба подхода). Результаты явно кажутся похожими.
django
django-models
django-queryset
django-orm
Хасан Бэйг
источник
источник
if self.id in Article.objects.values_list('comment_id', flat=True):
, используя значения, которые вам нужны для доступа к словарюArticle.objects.filter(comment_id=self.id).exists()
?Ответы:
values()
Метод возвращает QuerySet , содержащие словари:values_list()
Метод возвращает QuerySet , содержащие кортежи:Если вы используете
values_list()
с одним полем, вы можете использоватьflat=True
для возврата QuerySet с одним значением вместо 1-кортежа:источник
distinct()
используется, да?distinct()
работает по-другому. Важно то, с какой структурой данных вы хотите работать.values()
возвращаетQuerySet
и не являетсяlist
. Хотя возвращаемый объектvalues()
выглядит как alist
, в некоторых случаях он не ведет себя как один. Например, он не будет json-сериализуемым, если мы не преобразуем его в «список»values_list
в истинный список Python, просто используяlist
функцию:list(Article.objects.values_list('comment_id', flat=True).distinct())
ценности()
Возвращает QuerySet, который возвращает
dictionaries
, а не экземпляры модели, когда используется как итеративный.values_list ()
Возвращает QuerySet, который возвращает
list of tuples
, а не экземпляры модели, когда используется как итеративный.различны ()
отчетливо используются
eliminate the duplicate
элементы.Пример:
источник
values
distinct()
удаляет дубликаты элементов из результатов запроса, а не из базы данных.Вы можете получить различные значения с:
источник