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'
Это не вернется обратно в отформатированном виде точно так, как вы указали, но оно легко настраивается и соответствует веб-стандарту, который становится заметно более полезным по мере роста вашего проекта.