Существует много документации о том, как сериализовать Model QuerySet, но как просто сериализовать в JSON поля экземпляра модели?
python
django
json
django-models
serialization
Джейсон Криста
источник
источник
django.core
для этого. Любая конкретная причина не использовать сериализовать набор запросов?Ответы:
Вы можете легко использовать список, чтобы обернуть требуемый объект, и это все, что нужно сериализаторам django для правильной сериализации, например:
источник
[0]
в конце своей последней строки, как предложено @DavorLucic? И нет необходимости в конце запятой в вашем списке буквально (ради любви к PEP8;).Если вы имеете дело со списком модельных экземпляров, лучшее, что вы можете сделать, это использовать
serializers.serialize()
, он будет соответствовать вашим потребностям.Однако вы должны столкнуться с проблемой при попытке сериализации одного объекта, а не
list
объектов. Таким образом, чтобы избавиться от различных хаков, просто используйте Djangomodel_to_dict
(если я не ошибаюсьserializers.serialize()
, тоже полагаюсь на это):Теперь вам просто нужен один прямой
json.dumps
вызов для сериализации в JSON:Это оно! :)
источник
datetime
полями. Решил это так,json.loads(serialize('json', [obj]))[0]
пока сериализатор естьdjango.core.serializers.serialize
Чтобы избежать обертки массива, удалите ее перед возвратом ответа:
Я нашел этот интересный пост на эту тему тоже:
http://timsaylor.com/convert-django-model-instances-to-dictionaries
Он использует django.forms.models.model_to_dict, который выглядит как идеальный инструмент для работы.
источник
На это есть хороший ответ, и я удивлен, что об этом не упоминалось. С помощью нескольких строк вы можете обрабатывать даты, модели и все остальное.
Создайте собственный кодировщик, который может работать с моделями:
Теперь используйте его, когда вы используете json.dumps
Теперь модели, даты и все остальное можно сериализовать, и это не обязательно должно быть в массиве, или сериализовано, и не сериализовано. Все, что у вас есть, может быть добавлено в
default
метод.Вы даже можете использовать родной JsonResponse Django следующим образом:
источник
json.dumps
и с другимиjson.dump
. Таким образом, вам не нужно изменять рабочий процесс приложения, потому что вы используете пользовательские объекты или добавляете другой вызов метода до преобразования в json. Просто добавьте свой код преобразования в кодировщик, и вы готовы к работе.Похоже, что вы спрашиваете, включает в себя сериализацию структуры данных экземпляра модели Django для совместимости. Другие постеры верны: если вы хотите, чтобы сериализованная форма использовалась с приложением python, которое может запрашивать базу данных через API Django, то вы бы хотели сериализовать набор запросов с одним объектом. Если, с другой стороны, вам нужен способ заново наполнить экземпляр модели где-то еще, не касаясь базы данных или не используя Django, то вам нужно немного поработать.
Вот что я делаю:
Во-первых, я использую
demjson
для преобразования. Это было то, что я нашел первым, но это может быть не лучшим. Моя реализация зависит от одной из его особенностей, но должны быть аналогичные способы с другими конвертерами.Во-вторых, внедрите
json_equivalent
метод во все модели, которые вам могут потребоваться сериализовать. Это волшебный методdemjson
, но, вероятно, вы захотите подумать о том, какую реализацию вы выберете. Идея состоит в том, что вы возвращаете объект, который может быть преобразован напрямуюjson
(например, массив или словарь). Если вы действительно хотите сделать это автоматически:Это не поможет вам, если у вас нет абсолютно плоской структуры данных (нет
ForeignKeys
, только цифры и строки в базе данных и т. Д.). В противном случае вам следует серьезно подумать о правильном способе реализации этого метода.В-третьих, позвоните,
demjson.JSON.encode(instance)
и вы получите то, что хотите.источник
Если вы спрашиваете, как сериализовать отдельный объект из модели и знаете , что получите только один объект в наборе запросов (например, с помощью objects.get), используйте что-то вроде:
что бы получить что-то в форме:
источник
Я решил эту проблему, добавив метод сериализации в мою модель:
Вот подробный эквивалент для тех, кто не любит однострочников:
_meta.fields
упорядоченный список полей модели, доступ к которому можно получить из экземпляров и из самой модели.источник
Вот мое решение для этого, которое позволяет вам легко настроить JSON, а также организовать связанные записи
Сначала реализуем метод на модели. Я звоню,
json
но вы можете называть это как хотите, например:Тогда в представлении я делаю:
источник
car.json()
Используйте список, это решит проблему
Шаг 1:
Шаг 2:
Шаг 3:
источник
Для сериализации и десериализации используйте следующее:
источник
.values()
это то, что мне нужно для преобразования экземпляра модели в JSON..values () документация: https://docs.djangoproject.com/en/3.0/ref/models/querysets/#values
Пример использования с моделью под названием Project .
Примечание: я использую Django Rest Framework
Результат от действительного идентификатора:
источник
Если вы хотите вернуть один объект модели как ответ json клиенту, вы можете сделать это простое решение:
источник
Используйте Django Serializer с
python
форматом,Какая разница между
json
иpython
формат?json
Формат будет возвращать результат , какstr
тогдаpython
будет возвращать результат в любомlist
илиOrderedDict
источник
OrderedDict
, неdict
Не похоже, что вы можете сериализовать экземпляр, вам нужно будет сериализовать QuerySet одного объекта.
У меня закончился
svn
выпуск django, так что это может быть не так в более ранних версиях.источник
Я возвращаю диктат моего дела
поэтому он возвращает что-то вроде {'field1': value, "field2": value, ....}
источник
TypeError: <django.db.models.base.ModelState object at 0x7f2b3bf62310> is not JSON serializable
как насчет этого пути:
или исключить все, что вы не хотите.
источник
Все эти ответы были немного хакерскими по сравнению с тем, что я ожидал бы от фреймворка, самого простого метода, я думаю, если вы используете остальную фреймворк:
Он использует Serializer напрямую, уважая поля, которые вы на нем определили, а также любые ассоциации и т. Д.
источник