Получение массива json-объектов в представлении Django
У меня есть эта таблица или модель:
longitude | latitude | session |
---|---|---|
12 | 34 | 1 |
99 | 42 | 2 |
99 | 42 | 1 |
99 | 42 | 3 |
99 | 42 | 1 |
99 | 42 | 2 |
Мне нужно сделать запрос, чтобы получить все данные по сессиям. Поэтому я получаю все данные из таблицы и применяю 'distinct' для получения сессий:
sessions= GPSData.objects.values('session_new_id').distinct()
Я получаю:
<QuerySet [{'session': 1}, {'session': 2}, 'session': 3}]>
Теперь для каждой сессии мне нужно получить долготу и широту. После этого мне нужно отправить HttpResponse с данными в JSON. Поэтому я пытаюсь в своем представлении:
def get_all_gps(request):
data=[]
for session in sessions:
y=GPSData.objects.filter(session=session['session'])
y = serializers.serialize("json", y)
data.append(y)
return HttpResponse(data, content_type='application/json')
Я получаю ошибку в шаблоне, потому что передаю массив, а не объект json:
SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data at line 1 column 190986 of the JSON data
В общем, что мне нужно, это отвечать массивом JSON объектов. Что-то вроде этого:
[[{json from session 1}],[{json from session 2}],[{json from session 3}]]
Можно ли это сделать?
Я следовал ссылке, которую прокомментировал @Mike Jones, и смог сделать это, используя JsonResponse
.
from django.http import JsonResponse
from .models import GPSData
def get_all_gps(request):
data = []
for gps_data in GPSData.objects.all().order_by("session").values():
try:
session_list = next(l for l in data if l[0]["session"] == gps_data["session"])
except StopIteration:
session_list = []
data.append(session_list)
session_list.append(gps_data)
return JsonResponse(data, safe=False)