Некоторое время назад я сделал сообщение в блоге с практическими рекомендациями при использовании SVN только с одним разработчиком. Я назвал его Единственное управление исходным кодом обслуживания
Вам просто нужно добавить в свой вызов .dumps
аргумент default = encode_myway
, чтобы simplejson
знал, что делать, когда вы передаете ему данные, типы которых он не знает - ответ на ваш вопрос "почему", конечно же, заключается в том, что вы не сказали бедному simplejson
, что делать с один из экземпляров вашей модели.
И, конечно же, вам нужно написать encode_myway
для предоставления данных, кодируемых в формате JSON, например:
def encode_myway(obj):
if isinstance(obj, User):
return [obj.username,
obj.firstname,
obj.lastname,
obj.email]
# and/or whatever else
elif isinstance(obj, OtherModel):
return [] # whatever
elif ...
else:
raise TypeError(repr(obj) + " is not JSON serializable")
В основном, JSON знает ОЧЕНЬ элементарные типы данных (строки, целые числа и float, сгруппированные в словари и списки) - это ВАША обязанность как прикладного программиста сопоставлять все остальное в / из таких элементарных типов данных, а в simplejson
это 's обычно выполняется с помощью функции, переданной в default =
в dump
или dumps
time.
В качестве альтернативы вы можете использовать json
сериализатор, являющийся частью Django, см. документацию .