Django response в формате json?

Пытаюсь отдать данные в формате json, но получаю ошибку:
Вариант 1
views.py
...
ingredients = Food.objects.values_list('id', 'title').filter(title__icontains=name)
response_data = serializers.serialize('json', ingredients)
return JsonResponse(response_data)

Ошибка:
'tuple' object has no attribute '_meta'


Вариант 2
views.py
...
ingredients = Food.objects.values_list('id', 'title').filter(title__icontains=name)
return JsonResponse(json.dumps(ingredients), safe=True)

Ошибка:
< QuerySet[(...)] > is not JSON serializable
  • Вопрос задан
  • 5194 просмотра
Решения вопроса 1
@Chebaa Автор вопроса
Самое простое решение
ingredients = Food.objects.values('id', 'title').filter(title__icontains=name)
return JsonResponse({'ingredients': list(ingredients)})
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
dimonchik2013
@dimonchik2013
полковник Андрейченко
тебе нужен JSON-объект или строка, которую можно преобразовать в JSON

https://stackoverflow.com/questions/15874233/outpu...
Ответ написан
JsonResponse принимает dict.
Как вариант, можно попробовать в моделе определить функцию, которая будет возвращать объект как dict.
ingredients = map(lambda food: food.to_json(), Food.objects.values_list('id', 'title').filter(title__icontains=name))
return JsonResponse(json.dumps(ingredients), safe=True)
Ответ написан
В долгосрочной перспективе стоит использовать Django REST Framework: djangorestframework.org
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы