2010-03-04 40 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' 

這不會爲你指定的回來格式化了,但是那是很容易配置,並遵守網絡標準,它變得更明顯隨着項目的發展而變得有用。