我一直在開發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