Задать вопрос
timofeydeys
@timofeydeys
Свобода творцов

Python + json, почему не серилизуется массив?

ПОдскажите пожалуйста. Почему не серелизует мне лист объектов Tiket???
Я по ajax запросу хочу отдать массив на страницу и там поменять данные. Получает список нормально. ПРоблема в завертывании в json
Вот код:
def opens(request):
    t = Tiket.objects.filter(user=request.user, sost=True)
   
    return JsonResponse({'tiketsS':t})
  • Вопрос задан
  • 282 просмотра
Подписаться 1 Оценить 1 комментарий
Решения вопроса 1
t = Tiket.objects.filter(user=request.user, sost=True)

это не список(list) объектов, это ленивый QuerySet, который при попытке итерации по оному будет вычислен(и в ряде других случаев), и на каждом шаге будет возвращать экземпляры модели, и этот объект не может быть преобразован в json(стандартными средствами).
Пр этом экземпляры модели, никоим образом сами по себе в json не преобразуются, нет в json никаких моделей, если хотите получить список json объектов, то подавать надо список словарей.

t = Tiket.objects.filter(user=request.user, sost=True).values()
   
    return JsonResponse({'tiketsS': list(t)})

При этом нужно быть уверенным, что все поля которые скармливаем JsonResponse джанга может преобразовать в json (вашу модель должен суметь), только обратите внимание на дату, она у вас станет строкой.

З.Ы. если хотите ответить используйте "комментировать"
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Скорее всего в ваших объектах есть несериализуемые типы. Попробуйте преобразовать через json.dumps(t) и отловить эксепшен.
Ответ написан
Комментировать
timofeydeys
@timofeydeys Автор вопроса
Свобода творцов
Скорее всего в ваших объектах есть несериализуемые типы. Попробуйте преобразовать через json.dumps(t) и отловить эксепшен.


Вот модель:
class Tiket(models.Model):
    user = models.ForeignKey(User)
    name = models.CharField(max_length=350)
    info = models.TextField()
    sost = models.BooleanField(default=True)  # True - открыт тикет
    date = models.DateTimeField('Дата создания')
    manager = models.ForeignKey(Manager_cab)  # Прикреплен ли менеджер
    new_mess = models.BooleanField(default=False)
    kol_mess = models.IntegerField(default=0)


dumps не серилизует. Тоже самое выдает.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽