有很多关于如何序列化模型QuerySet的文档,但是如何将模型实例的字段序列化为JSON呢?


当前回答

为了避免数组包装器,在返回响应之前删除它:

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,它看起来是完成这项工作的完美工具。

其他回答

使用python格式的Django Serializer,

from django.core import serializers

qs = SomeModel.objects.all()
serialized_obj = serializers.serialize('python', qs)

json和python格式有什么区别?

json格式将以str格式返回结果,而python将以list或OrderedDict格式返回结果

.values()是我需要将模型实例转换为JSON。

.values()文档:https://docs.djangoproject.com/en/3.0/ref/models/querysets/#values

名为Project的模型的示例使用。

注意:我使用的是Django Rest Framework

from django.http import JsonResponse

@csrf_exempt
@api_view(["GET"])
def get_project(request):
    id = request.query_params['id']
    data = Project.objects.filter(id=id).values()
    if len(data) == 0:
        return JsonResponse(status=404, data={'message': 'Project with id {} not found.'.format(id)})
    return JsonResponse(data[0])

有效id的结果:

{
    "id": 47,
    "title": "Project Name",
    "description": "",
    "created_at": "2020-01-21T18:13:49.693Z",
}

似乎你不能序列化实例,你必须序列化一个对象的QuerySet。

from django.core import serializers
from models import *

def getUser(request):
    return HttpResponse(json(Users.objects.filter(id=88)))

我运行了django的svn释放,所以这可能不是在早期版本。

这是一个项目,它可以序列化(JSON基础现在)你的模型中的所有数据,并将它们自动放在一个特定的目录,然后它可以在你想要的任何时候反序列化它…我个人用这个脚本序列化了数千条记录,然后将它们全部加载回另一个数据库,而没有丢失任何数据。

任何对开源项目感兴趣的人都可以贡献这个项目,并为其添加更多特性。

serializer_deserializer_model

这样怎么样:

def ins2dic(obj):
    SubDic = obj.__dict__
    del SubDic['id']
    del SubDic['_state']
return SubDic

或者排除你不想要的东西。