【问题标题】:In Django, how do I serialize a QuerySet that returns a dict object (created with .values())在 Django 中,如何序列化返回 dict 对象的 QuerySet(使用 .values() 创建)
【发布时间】:2017-10-19 17:45:37
【问题描述】:

在 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() 语句,它使该语句返回一个包含 dict 而不是 Django 模型实例的 QuerySet。

因此以下调用对其进行序列化

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

失败并出现以下错误:

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

关于序列化的任何建议,但为了简洁起见,我需要它们而不省略 .values()。

【问题讨论】:

    标签: python json django serialization django-serializer


    【解决方案1】:

    如果你想将dict对象序列化成json,那么你可以导入json,

    import json
    data = json.dumps(result)
    

    Django 序列化器用于 Django 模型对象和查询集。这就是它寻找 _meta 字段的原因。

    【讨论】:

    • 此外,如果您的 dict 包含 JSON 不可序列化类型(如 datetime),您需要转换它们。或者,使用我创建的 jsonplus 之类的库来解决这个问题。
    猜你喜欢
    • 2020-11-04
    • 2016-02-27
    • 1970-01-01
    • 2021-08-13
    • 2011-03-01
    • 2020-06-20
    • 1970-01-01
    • 2012-06-01
    • 2017-12-23
    相关资源
    最近更新 更多