В Django, как мне сериализовать QuerySet, который возвращает объект dict (созданный с помощью.values ​​())

В Django 1.10 я пытаюсь сериализовать QuerySet, полученный из следующего запроса:

events_in_period = Event.objects \
.filter(timestamp__gte=start_day,
        timestamp__lte=end_day,
        request__isnull=False,
        name=EventType.COMPLETED) \
.annotate(date=TruncDay('timestamp')) \
.values('date') \
.annotate(completed_count=Count('id')) \
.order_by('date')

Главное это .values() оператор, который заставляет этот оператор возвращать QuerySet, который содержит dict а не экземпляр модели Django.

Поэтому следующие вызовы для его сериализации

from django.core import serializers
output = serializers.serialize('json', result)

ошибка со следующей ошибкой:

AttributeError: 'dict' object has no attribute '_meta'

Любые предложения по сериализации, не опуская .values() как мне они нужны для краткости.

1 ответ

Если вы хотите сериализовать объект dict в json, вы можете импортировать json,

import json
data = json.dumps(result)

Сериализаторы Django предназначены для объектов модели Django и QuerySets. Вот почему он ищет поле _meta.

Другие вопросы по тегам