Flash と Android アプリの両方で使用できるように、Django でいくつかの RESTful サービスの開発に取り組んでいます。
サービス インターフェイスの開発は非常に簡単でしたが、外部キーと多対多の関係を持つオブジェクトをシリアル化する際に問題が発生しました。
私はこのようなモデルを持っています:
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 はデフォルトでこれを行わないことがわかりましたが、オブジェクトとそれに関連するすべてのオブジェクトを自動的にシリアル化する方法はありますか? ヒントや読書は大歓迎です。