У меня есть следующий код для сериализации набора запросов;
def render_to_response(self, context, **response_kwargs):
return HttpResponse(json.simplejson.dumps(list(self.get_queryset())),
mimetype="application/json")
И вот мой get_querset()
[{'product': <Product: hederello ()>, u'_id': u'9802', u'_source': {u'code': u'23981', u'facilities': [{u'facility': {u'name': {u'fr': u'G\xe9n\xe9ral', u'en': u'General'}, u'value': {u'fr': [u'bar', u'r\xe9ception ouverte 24h/24', u'chambres non-fumeurs', u'chambres familiales',.........]}]
Что мне нужно сериализовать. Но он говорит, что не может сериализовать <Product: hederello ()>
. Поскольку список состоит как из объектов django, так и из dicts. Любые идеи ?
Ответы:
simplejson
иjson
плохо работают с объектами django.Встроенные сериализаторы Django могут сериализовать только наборы запросов, заполненные объектами django:
В твоем случае,
self.get_queryset()
внутри содержится смесь объектов django и dicts.Один из вариантов - избавиться от экземпляров модели в
self.get_queryset()
и заменить их на dicts, используяmodel_to_dict
:Надеюсь, это поможет.
источник
'NoneType' object has no attribute 'concrete_model'
... И использую Django 1.4+safe
тег. stackoverflow.com/a/57939897/4157431Самый простой способ - использовать JsonResponse .
Для набора запросов вы должны передать список
values
для этого набора запросов, например:источник
Я обнаружил, что это можно сделать довольно просто, используя метод ".values", который также дает именованные поля:
«list» должен использоваться для получения данных как итерируемых, поскольку тип «value queryset» является только dict, если выбран как итеративный.
Документация: https://docs.djangoproject.com/en/1.7/ref/models/querysets/#values
источник
list()
видимому, он все еще необходим.Начиная с версии 1.9 Более простой и официальный способ получения json
источник
Наш js-программист попросил меня вернуть ей точные данные формата JSON вместо строки в json-кодировке.
Ниже приведено решение. (Это вернет объект, который можно использовать / просматривать прямо в браузере).
источник
HttpResponse(tmpObj)
Сначала я добавил к своей модели метод to_dict;
Тогда у меня есть это;
и, наконец, используйте этот класс для сериализации моего набора запросов.
Это работает довольно хорошо
источник