Модели Django не ajax сериализуемый

Некоторое время назад я сделал сообщение в блоге с практическими рекомендациями при использовании SVN только с одним разработчиком. Я назвал его Единственное управление исходным кодом обслуживания

10
задан theycallmemorty 22 September 2009 в 01:41
поделиться

1 ответ

Вам просто нужно добавить в свой вызов .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, см. документацию .

29
ответ дан 3 December 2019 в 15:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: