我一直致力于在 Django 中开发一些 RESTful 服务,以用于 Flash 和 Android 应用程序。
开发服务接口非常简单,但是我遇到了序列化具有外键和多对多关系的对象的问题。
我有一个这样的模型:
class Artifact( models.Model ):
name = models.CharField( max_length = 255 )
year_of_origin = models.IntegerField( max_length = 4, blank = True, null = True )
object_type = models.ForeignKey( ObjectType, blank = True, null = True )
individual = models.ForeignKey( Individual, blank = True, null = True )
notes = models.TextField( blank = True, null = True )
然后我会像这样在这个模型上执行一个查询,使用select_related()
,以确保遵循外键关系:
artifact = Artifact.objects.select_related().get(pk=pk)
获得对象后,我将其序列化,并将其传递回我的视图:
serializers.serialize( "json", [ artifact ] )
这就是我得到的,请注意外键(object_type 和个人)只是它们相关对象的 id。
[
{
pk: 1
model: "artifacts.artifact"
fields: {
year_of_origin: 2010
name: "Dummy Title"
notes: ""
object_type: 1
individual: 1
}
}
]
这很好,但我在使用时希望select_related()
它会自动使用相关对象填充外键字段,而不仅仅是对象的 id。
我最近转换为 Django,但花了相当多的时间使用 CakePHP 进行开发。
我真正喜欢 Cake ORM 的地方在于它会遵循关系并默认创建嵌套对象,并且能够在调用查询时取消绑定关系。
这使得以一种不需要逐案干预的方式抽象服务变得非常容易。
我看到Django默认不这样做,但是有没有办法自动序列化一个对象及其所有相关对象?任何提示或阅读将不胜感激。