有很多关于如何序列化模型QuerySet的文档,但是如何将模型实例的字段序列化为JSON呢?
当前回答
要序列化和反序列化,请使用以下命令:
from django.core import serializers
serial = serializers.serialize("json", [obj])
...
# .next() pulls the first object out of the generator
# .object retrieves django object the object from the DeserializedObject
obj = next(serializers.deserialize("json", serial)).object
其他回答
如果你处理的是一个模型实例列表,你能做的最好的就是使用serializer .serialize(),它会非常适合你的需要。
但是,您将面临试图序列化单个对象而不是对象列表的问题。这样,为了摆脱不同的黑客,只需使用Django的model_to_dict(如果我没有弄错的话,serializer .serialize()也依赖于它):
from django.forms.models import model_to_dict
# assuming obj is your model instance
dict_obj = model_to_dict( obj )
现在只需要一个直接的json。Dumps调用,将其序列化为json:
import json
serialized = json.dumps(dict_obj)
就是这样!:)
ville = UneVille.objects.get(nom='lihlihlihlih')
....
blablablab
.......
return HttpResponse(simplejson.dumps(ville.__dict__))
我返回我实例的字典
所以它会返回类似{'field1':value,"field2":value,....}
使用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",
}
要序列化和反序列化,请使用以下命令:
from django.core import serializers
serial = serializers.serialize("json", [obj])
...
# .next() pulls the first object out of the generator
# .object retrieves django object the object from the DeserializedObject
obj = next(serializers.deserialize("json", serial)).object
推荐文章
- Django:“projects”vs“apps”
- 我如何在Django中过滤一个DateTimeField的日期?
- 如何在Django中序列化一个模型实例?
- Django更改默认的runserver端口
- 如何限制Django模型中数值字段的最大值?
- 获取对象的Django管理url
- Django可选url参数
- 我如何提高一个响应禁止在django
- 使用Django South进行向后迁移
- 如何访问Django模板中的字典元素?
- Pylint在Visual Studio代码中“未解决的导入”错误
- 如何更改Django应用程序的名称?
- 在django的form字段中默认创建空的queryset
- 在django模型自定义save()方法中,你应该如何识别一个新对象?
- 从URL中获取参数