Django对象的深度JSON序列化

4

Consider the following Django Model:

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。

2个回答


0

django-tastypie可以解决这个问题。它支持各种深层关系,同时遵循REST原则,这意味着如果你使用jQuery,一个简单的$.ajax()就可以获取数据。

由于tastypie遵循REST原则,因此还支持使用PUTPOSTDELETE方法进行更新、插入和删除。

tastypie还支持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'

这不会按照您指定的格式返回,但它很容易进行配置,并遵循Web标准,在您的项目增长时变得更加有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接