首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Django中序列化模型实例?

如何在Django中序列化模型实例?
EN

Stack Overflow用户
提问于 2009-04-16 16:47:32
回答 13查看 197.1K关注 0票数 198

有很多关于如何序列化Model的文档,但是如何才能将QuerySet实例的字段序列化呢?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2010-07-20 18:31:14

您可以轻松地使用列表来包装所需的对象,这就是django序列化程序正确序列化它所需的全部内容,例如:

代码语言:javascript
复制
from django.core import serializers

# assuming obj is a model instance
serialized_obj = serializers.serialize('json', [ obj, ])
票数 281
EN

Stack Overflow用户

发布于 2012-12-15 03:05:18

要避免数组包装,请在返回响应之前将其删除:

代码语言:javascript
复制
import json
from django.core import serializers

def getObject(request, id):
    obj = MyModel.objects.get(pk=id)
    data = serializers.serialize('json', [obj,])
    struct = json.loads(data)
    data = json.dumps(struct[0])
    return HttpResponse(data, mimetype='application/json')

我也发现了这篇关于这个话题的有趣的帖子:

http://timsaylor.com/convert-django-model-instances-to-dictionaries

它使用django.forms.models.model_to_dict,这看起来是完成这项工作的完美工具。

票数 46
EN

Stack Overflow用户

发布于 2018-07-15 11:36:41

这个问题有一个很好的答案,我很惊讶它没有被提及。只需几行代码,您就可以处理日期、模型和其他所有内容。

制作一个可以处理模型的自定义编码器:

代码语言:javascript
复制
from django.forms import model_to_dict
from django.core.serializers.json import DjangoJSONEncoder
from django.db.models import Model

class ExtendedEncoder(DjangoJSONEncoder):

    def default(self, o):

        if isinstance(o, Model):
            return model_to_dict(o)

        return super().default(o)

现在,在使用json.dumps时使用它

代码语言:javascript
复制
json.dumps(data, cls=ExtendedEncoder)

现在,模型、日期和一切都可以序列化,而不必在数组中或序列化和非序列化。您拥有的任何自定义内容都可以添加到default方法中。

你甚至可以这样使用Django的原生JsonResponse:

代码语言:javascript
复制
from django.http import JsonResponse

JsonResponse(data, encoder=ExtendedEncoder)
票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/757022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档