リソースの詳細が要求された場合にのみ、中間テーブルからリソースにデータを追加するベスト プラクティスはありますか?
例として、Django のサンプル モデル (Person、Group、および Membership) を使用します。
すべての Person リソース (/api/person/) のリストを取得すると、結果にグループ情報が表示されません。
[
{
"id": "1",
"name": "John Doe",
"resourceUri": "/user/1/"
},
{
"id": "2",
"name": "Jane Doe",
"resourceUri": "/user/2/"
}
]
しかし、1 つの Person リソース (/api/person/1/) の詳細を取得すると、結果に特定のグループ情報が必要になります。そのグループ情報は、グループ モデルとメンバーシップ モデルの両方から部分的に取得されます。
{
"resourceUri": "/user/1/",
"name": "John Doe",
"groups": [
{
"date_joined": "15/02/1988",
"name": "administrator"
},
{
"date_joined": "25/05/1992",
"name": "helpdesk"
}
]
}
基本的に、結果にデータを追加する方法を探しています。オプションで、リソースの詳細を取得するなどの特定のメソッドが要求された場合のみ。脱水メソッドをオーバーライドしてこれを実装しようとしましたが、成功しましたが、非常にハックな感じで、これにベストプラクティスがあるのだろうか.
Django モデル
class Person(models.Model):
name = models.CharField(max_length=128)
def __unicode__(self):
return self.name
class Group(models.Model):
name = models.CharField(max_length=128)
def __unicode__(self):
return self.name
class Membership(models.Model):
person = models.ForeignKey(Person)
group = models.ForeignKey(Group)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
class Meta:
unique_together = ('person', 'group')
TastyPie のリソース
class Person(ModelResource):
class Meta:
queryset = Person.objects.all()