有很多关于如何序列化Model的文档,但是如何才能将QuerySet实例的字段序列化呢?
发布于 2010-07-20 18:31:14
您可以轻松地使用列表来包装所需的对象,这就是django序列化程序正确序列化它所需的全部内容,例如:
from django.core import serializers
# assuming obj is a model instance
serialized_obj = serializers.serialize('json', [ obj, ])
发布于 2012-12-15 03:05:18
要避免数组包装,请在返回响应之前将其删除:
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,这看起来是完成这项工作的完美工具。
发布于 2018-07-15 11:36:41
这个问题有一个很好的答案,我很惊讶它没有被提及。只需几行代码,您就可以处理日期、模型和其他所有内容。
制作一个可以处理模型的自定义编码器:
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时使用它
json.dumps(data, cls=ExtendedEncoder)
现在,模型、日期和一切都可以序列化,而不必在数组中或序列化和非序列化。您拥有的任何自定义内容都可以添加到default
方法中。
你甚至可以这样使用Django的原生JsonResponse:
from django.http import JsonResponse
JsonResponse(data, encoder=ExtendedEncoder)
https://stackoverflow.com/questions/757022
复制相似问题