2

リソースの詳細が要求された場合にのみ、中間テーブルからリソースにデータを追加するベスト プラクティスはありますか?

例として、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()
4

0 に答える 0