Глубокая JSON-сериализация объектов Django - PullRequest
4 голосов
/ 04 марта 2010

Рассмотрим следующую модель Django:

class Event(models.Model):

    startDate = models.DateField()
    endDate = models.DateField()

    user = models.ForeignKey(User, null=True)

Позже, на мой взгляд, я делаю это:

django.core.serializers.serialize("json", Event.objects.all())
return HttpResponse(data, mimetype='application/javascript')

И получите следующий ответ:

[
  {
    "pk": 1, 
    "model": "myapp.event", 
    "fields": {
      "startDate": "2010-02-02", 
      "endDate": "2010-02-02", 
      "user": 2
    }
  }
]

Можно ли заставить сериализатор «углубиться» и сериализовать пользователя, на который ссылается экземпляр события, чтобы я мог получить доступ к этим данным в своем коде Javascript?

Кажется, что это возможно при использовании версии для разработки, но я использую 1.1 FWIW.

Ответы [ 2 ]

1 голос
/ 04 марта 2010
0 голосов
/ 07 марта 2013

django-tastypie добьется цели. Он имеет всевозможную поддержку для таких глубоких отношений, как и REST, то есть, если вы используете jQuery, простой $.ajax() поможет вам получить данные.

Поскольку tastypie придерживается REST, он также поддерживает обновления, вставки и удаления с использованием методов PUT, POST и DELETE соответственно.

Он также поддерживает JSON, XML и YAML. Он помогает создать полный REST API, который может показаться немного тупым для того, что вы пытаетесь сделать, но его довольно легко настроить, и позволяет полностью настроить, какие поля возвращаются, а какие исключаются.

В вашем API вы бы сделали что-то вроде:

from tastypie.resources import Resource
from django.contrib.auth.models import User
from myapp import models

class UserResource(Resource):
    class Meta:
        queryset = User.objects.all()
        resource_name = 'user'

class EventResource(Resource):
    user = fields.ToOneField(UserResource, full=True)
    class Meta:
        queryset = models.Event.objects.all()
        resource_name = 'event'

Это не вернется обратно в отформатированном виде точно так, как вы указали, но оно легко настраивается и соответствует веб-стандарту, который становится заметно более полезным по мере роста вашего проекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...