有很多关于如何序列化模型QuerySet的文档,但是如何将模型实例的字段序列化为JSON呢?
当前回答
如果你想将单个模型对象作为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))
其他回答
如果你想将单个模型对象作为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序列化器正确序列化它所需要的,例如:
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以及组织相关记录
首先在模型上实现一个方法。我调用的是json,但你可以叫它任何你喜欢的,例如:
class Car(Model):
...
def json(self):
return {
'manufacturer': self.manufacturer.name,
'model': self.model,
'colors': [color.json for color in self.colors.all()],
}
然后在视图中:
data = [car.json for car in Car.objects.all()]
return HttpResponse(json.dumps(data), content_type='application/json; charset=UTF-8', status=status)
.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",
}
推荐文章
- 如何从外部访问本地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转换为列表?
- 如何直接从测试驱动程序调用自定义的Django manage.py命令?
- 在Python Django中运行单元测试时,如何禁用日志记录?
- Django CSRF检查Ajax POST请求失败