Django的深JSON序列化对象
问题描述:
考虑下面的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。
答
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'
这不会为你指定的回来格式化了,但是那是很容易配置,并遵守网络标准,它变得更明显随着项目的发展而变得有用。