2010-03-04 68 views
4

考虑下面的Django模型:Django的深JSON序列化对象

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 
    } 
    } 
] 

是否有可能让序列化程序“更深入”并序列化由Event实例引用的用户,以便我可以访问在我的Javascript代码中的数据?

看起来好像这是可以使用开发版本,但我使用1.1 FWIW。

回答

0

django-tastypie会做的伎俩。它对此类深层关系提供了各种支持,并且坚持使用REST,这意味着如果您使用jQuery,简单的$.ajax()就可以完成获取数据的诀窍。

因为tastypie坚持REST,它也有更新,插入支持,并使用PUTPOSTDELETE方法,分别删除。

它也支持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' 

这不会为你指定的回来格式化了,但是那是很容易配置,并遵守网络标准,它变得更明显随着项目的发展而变得有用。