有很多关于如何序列化模型QuerySet的文档,但是如何将模型实例的字段序列化为JSON呢?
当前回答
使用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格式返回结果
其他回答
我通过在我的模型中添加一个序列化方法来解决这个问题:
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是模型字段的有序列表,可以从实例和模型本身访问。
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格式返回结果
这个问题有一个很好的答案,我很惊讶它没有被提及。只需几行代码,您就可以处理日期、模型和其他所有内容。
制作一个可以处理模型的自定义编码器:
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)
现在模型,日期和所有东西都可以序列化它不需要在数组中或序列化或非序列化。任何自定义的东西都可以添加到默认方法中。
你甚至可以这样使用Django的原生JsonResponse:
from django.http import JsonResponse
JsonResponse(data, encoder=ExtendedEncoder)
如果你想将单个模型对象作为json响应返回给客户端,你可以做这个简单的解决方案:
from django.forms.models import model_to_dict
from django.http import JsonResponse
movie = Movie.objects.get(pk=1)
return JsonResponse(model_to_dict(movie))
推荐文章
- 如何在django应用程序中显示favicon ?
- 如何在Django中设置时区
- django导入错误-没有core.management模块
- 如何从外部访问本地Django web服务器
- 在Django模型中存储电话号码的最佳方法是什么?
- 如何禁用django-rest-framework的管理风格的可浏览界面?
- 如何获取请求。Django-Rest-Framework序列化器中的用户?
- 如何在Django模板中获得我的网站的域名?
- 在django Forms中定义css类
- 我应该在.gitignore文件中添加Django迁移文件吗?
- SQLAlchemy是否有与Django的get_or_create等价的函数?
- 如何选择一个记录和更新它,与一个单一的查询集在Django?
- Django REST框架:向ModelSerializer添加额外字段
- 如何在django上自动化createsuperuser ?
- 如何将Django QuerySet转换为列表?