python – Django将“Queryset”序列化为JSON,仅使用字段信息和id来构建RESTful响应

我目前拥有一个具有’title’和’summary’字段的Post模型.我正在检索所有帖子,并将其作为JSON作为RESTful API界面的一部分返回.

这是基本的方法

from django.core import serializers

def list_posts(request):
    posts = Post.objects.filter(owner=authenticated_user)
    serialized = serializers.serialize("json", posts, fields=('title', 'summary'))
    return HttpResponse(serialized, mimetype='application/json')

当我访问相应的路线时,我收到以下回复.

当前回应

[{"pk": 4, "model": "api.post", "fields": {"summary": "Testing", "title": "My Test"}}, {"pk": 5, "model": "api.post", "fields": {"summary": "testing again", "title": "Another test"}}]

这在技术上包含我客户端需要构建模型的所有信息(我使用Backbone,并且可以使用collection.parse来构造我需要的,但服务器端应该负责构造好响应).令我感到困扰的是,它看起来不像API中常用的标准API响应.我认为像下面这样的JSON响应会更“标准化”.

期望的回应

[{'summary': 'Testing', 'id': 4, 'title': 'My test'}, {'summary': 'My Test', 'id':5, 'title': 'Another test'}]

序列化的输出似乎不太适合在JSON中返回模型实例集合,作为API调用的响应,这似乎是一个相当普遍的需求.我想返回字段信息与id(或pk,如果它必须称为pk).

你想要实现的是转储到json的字段的子集.

你正在做的是将整个django的ORM对象序列化.不好.

把事情简单化:

import json

posts = (Post.objects.filter(owner=authenticated_user)
                     .values('id', 'title', 'summary'))
json_posts = json.dumps(list(posts))
翻译自:https://stackoverflow.com/questions/14431580/django-serialize-queryset-to-json-to-construct-restful-response-with-only-field

转载注明原文:python – Django将“Queryset”序列化为JSON,仅使用字段信息和id来构建RESTful响应