我一直致力于在 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 和 individual)只是其相关对象的 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 默认情况下不会这样做,但是有没有办法自动序列化一个对象及其所有相关对象?任何提示或阅读将不胜感激。