【发布时间】:2011-04-14 18:42:19
【问题描述】:
我一直致力于在 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 默认不这样做,但是有没有办法自动序列化一个对象及其所有相关对象?任何提示或阅读将不胜感激。
【问题讨论】:
标签: python django django-orm