Django Serialize Queryset для JSON для создания ответа RESTful с информацией только о поле и идентификатором - программирование
Подтвердить что ты не робот

Django Serialize Queryset для JSON для создания ответа RESTful с информацией только о поле и идентификатором

В настоящее время у меня есть модель Post с полями "title" и "summary". Я извлекаю все сообщения и возвращаю их как JSON как часть интерфейса API RESTful.

Здесь основной подход

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).

4b9b3361

Ответ 1

То, что вы хотите достичь, - это подмножество полей, сбрасываемых в json.

Что вы делаете, это сериализация объектов ORM всего django. Нехорошо.

Держите его простым:

import json

posts = (Post.objects.filter(owner=authenticated_user)
                     .values('id', 'title', 'summary'))
json_posts = json.dumps(list(posts))