在Django中序列化外键对象

8 浏览
0 Comments

在Django中序列化外键对象

我一直在开发一些RESTful服务,用于与Flash和Android应用程序一起使用的Django。开发服务接口非常简单,但我在序列化具有外键和多对多关系的对象时遇到了问题。

我有一个像这样的模型:

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默认不会这样做,但是否有一种方法可以自动序列化一个对象及其所有相关对象?任何提示或阅读将不胜感激。

0