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


当前回答

使用列表,它将解决问题

步骤1:

 result=YOUR_MODELE_NAME.objects.values('PROP1','PROP2').all();

步骤2:

 result=list(result)  #after getting data from model convert result to list

步骤3:

 return HttpResponse(json.dumps(result), content_type = "application/json")

其他回答

你可以很容易地使用一个列表来包装所需的对象,这就是django序列化器正确序列化它所需要的,例如:

from django.core import serializers

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

我通过在我的模型中添加一个序列化方法来解决这个问题:

def toJSON(self):
    import simplejson
    return simplejson.dumps(dict([(attr, getattr(self, attr)) for attr in [f.name for f in self._meta.fields]]))

下面是对那些讨厌一行程序的人的冗长等效:

def toJSON(self):
    fields = []
    for field in self._meta.fields:
        fields.append(field.name)

    d = {}
    for attr in fields:
        d[attr] = getattr(self, attr)

    import simplejson
    return simplejson.dumps(d)

_meta。Fields是模型字段的有序列表,可以从实例和模型本身访问。

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

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

serializer_deserializer_model

如果你正在询问如何序列化一个模型中的单个对象,并且你知道你只会在queryset中获得一个对象(例如,使用objects.get),那么可以使用如下方法:

import django.core.serializers
import django.http
import models

def jsonExample(request,poll_id):
    s = django.core.serializers.serialize('json',[models.Poll.objects.get(id=poll_id)])
    # s is a string with [] around it, so strip them off
    o=s.strip("[]")
    return django.http.HttpResponse(o, mimetype="application/json")

你会得到这样的东西:

{"pk": 1, "model": "polls.poll", "fields": {"pub_date": "2013-06-27T02:29:38.284Z", "question": "What's up?"}}

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

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