我一直在开发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和个人)只是它们相关对象的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默认不会这样做,但有没有办法自动序列化一个对象及其所有相关的对象?任何提示或阅读将不胜感激。
[PEP-008](http://www.python.org/dev/peps/pep-0008) – 2013-11-13 05:50:44