Как я могу преобразовать Django QuerySet в список dicts? Я не нашел ответа на этот вопрос, поэтому мне интересно, не хватает ли мне какой-то общей вспомогательной функции, которую все используют.
122
Используйте .values()
метод:
>>> Blog.objects.values()
[{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}],
>>> Blog.objects.values('id', 'name')
[{'id': 1, 'name': 'Beatles Blog'}]
Примечание: в результате получается, QuerySet
что в основном ведет себя как список, но не является экземпляром list
. Используйте, list(Blog.objects.values(…))
если вам действительно нужен экземпляр list
.
values()
вернуть, передав их в качестве аргументов. Также будьте осторожны, хотя похоже, что values возвращает список dicts, на самом деле это a,<class 'django.db.models.query.ValuesQuerySet'>
а не список.values()
, я не знаю, есть ли хороший метод, чтобы сделать то же самое,values()
но и с вызовом методов экземпляра ?!.values()
Метод возвратит вам результат типа ,ValuesQuerySet
который обычно то , что вам нужно в большинстве случаев.Но при желании вы можете превратиться
ValuesQuerySet
в собственный список Python, используя понимание списка Python, как показано в примере ниже.Я считаю, что приведенное выше помогает, если вы пишете модульные тесты и должны утверждать, что ожидаемое возвращаемое значение функции совпадает с фактическим возвращаемым значением, и в этом случае оба
expected_result
иactual_result
должны быть одного типа (например, словарь).источник
list(result)
Если вам по какой-то причине нужны собственные типы данных (например, сериализация JSON), это мой быстрый и грязный способ сделать это:
Как видите, создание словаря внутри списка на самом деле не СУХОЕ, поэтому, если кто-то знает способ получше ...
источник
data = list( blogs )
а потомjson.dumps( data )
. Выходит массив с кучей объектов на стороне javascript, синтаксический анализ не требуется.Вы не совсем точно определяете, как должны выглядеть словари, но, скорее всего, вы имеете в виду
QuerySet.values()
. Из официальной документации django :источник
Тип приведен в список
источник
Вы можете использовать
values()
метод в dict, который вы получили из поля модели Django, по которому вы делаете запросы, а затем вы можете легко получить доступ к каждому полю по значению индекса.Назовите это так -
источник
Вам нужно
DjangoJSONEncoder
иlist
сделать свойQueryset
кjson
, ссылка: Python JSON сериализации объект Decimalисточник
Проще говоря
list(yourQuerySet)
.источник
Вы можете определить функцию с помощью model_to_dict следующим образом:
источник