2

仅当请求该资源的详细信息时,是否有将数据从中间表添加到资源的最佳实践?

作为示例,我将使用 Django 示例模型(Person、Group 和 Membership)。

当我获得所有人员资源 (/api/person/) 的列表时,我没有在结果中获得任何组信息。

[
    {        
        "id": "1",
        "name": "John Doe",
        "resourceUri": "/user/1/"
    },
    {
        "id": "2",
        "name": "Jane Doe",
        "resourceUri": "/user/2/"
    }
]

但是,当我获得一个人资源 (/api/person/1/) 的详细信息时,我希望结果中包含某些组信息。该组信息部分来自组和成员模型。

{
    "resourceUri": "/user/1/",
    "name": "John Doe",
    "groups": [        
        {
            "date_joined": "15/02/1988",
            "name": "administrator"            
        },        
        {            
            "date_joined": "25/05/1992",
            "name": "helpdesk"
        }
    ]
}

所以基本上我正在寻找一种方法来为我的结果添加额外的数据。并且可选地仅在请求特定方法(例如获取资源的详细信息)时。我尝试通过重写 dehydrate 方法来实现这一点,我成功了,但感觉非常不自然,我想知道是否有最佳实践。

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')

美味派资源

class Person(ModelResource):
    class Meta:
        queryset = Person.objects.all()
4

0 回答 0