Похоже, что вы спрашиваете, включает в себя сериализацию структуры данных экземпляра модели Django для совместимости. Другие постеры верны: если вы хотите, чтобы сериализованная форма использовалась с приложением python, которое может запрашивать базу данных через API Django, то вы бы хотели сериализовать набор запросов с одним объектом. Если, с другой стороны, вам нужен способ заново наполнить экземпляр модели где-то еще, не касаясь базы данных или не используя Django, то вам нужно проделать небольшую работу.
Вот что я делаю:
Сначала я использую demjson
для преобразования. Это было то, что я нашел первым, но это может быть не лучшим. Моя реализация зависит от одной из ее особенностей, но с другими конвертерами должны быть аналогичные способы.
Во-вторых, внедрите метод json_equivalent
на всех моделях, которые вам могут потребоваться сериализовать. Это волшебный метод для demjson
, но, вероятно, вы захотите подумать о том, какую реализацию вы выберете. Идея состоит в том, что вы возвращаете объект, который напрямую конвертируется в json
(то есть массив или словарь). Если вы действительно хотите сделать это автоматически:
def json_equivalent(self):
dictionary = {}
for field in self._meta.get_all_field_names()
dictionary[field] = self.__getattribute__(field)
return dictionary
Это не поможет вам, если у вас нет абсолютно плоской структуры данных (без ForeignKeys
, только цифры и строки в базе данных и т. Д.). В противном случае вам следует серьезно подумать о правильном способе реализации этого метода.
В-третьих, звоните demjson.JSON.encode(instance)
, и у вас есть то, что вы хотите.