Как конвертировать объект QuerySet в Django в список предсказывает?
Как я могу преобразовать Django QuerySet в список диктовок? Я не нашел ответа на этот вопрос, поэтому мне интересно, отсутствует ли у меня какая-то общая вспомогательная функция, которую все используют.
5 ответов:
использовать
.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.
The
.values()метод возвращает результат типаValuesQuerySetобычно то, что вам нужно в большинстве случаев.но если вы хотите, вы могли бы превратить
ValuesQuerySetв собственный список Python с использованием понимания списка Python, как показано в примере ниже.result = Blog.objects.values() # return ValuesQuerySet object list_result = [entry for entry in result] # converts ValuesQuerySet into Python list return list_resultЯ считаю, что вышеизложенное помогает, если вы пишете модульные тесты и должны утверждать, что ожидаемое возвращаемое значение функции соответствует фактическому возвращаемому значению, и в этом случае оба
expected_resultиactual_resultдолжны быть одного типа (например, словарь).actual_result = some_function() expected_result = { # dictionary content here ... } assert expected_result == actual_result
вы точно не определяете, как должны выглядеть словари, но, скорее всего, вы имеете в виду
QuerySet.values(). Из официальная документация django:возвращает a
ValuesQuerySet- aQuerySetподкласс, который возвращает словари при использовании в качестве итерируемого, а не экземпляра модели объекты.каждый из этих словарей представляет объект, с ключами соответствует именам атрибутов модели объекты.
Если вам по какой-то причине нужны собственные типы данных (например, сериализация JSON), это мой быстрый "грязный" способ сделать это:
data = [{'id': blog.pk, 'name': blog.name} for blog in blogs]Как вы можете видеть, построение диктатора внутри списка не очень сухо, поэтому, если кто-то знает лучший способ ...