获取并组合来自中间tastypie资源的数据

时间:2012-10-03 06:53:08

标签: python django model tastypie

是否有最佳做法是仅在为该资源请求详细信息时才将数据从中间表添加到资源?

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

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

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

但是当我得到一个Person资源(/ api / person / 1 /)的详细信息时,我希望结果中有某些Group信息。该组信息部分来自集团和会员模型。

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

所以基本上我正在寻找一种方法来为我的结果添加额外的数据。并且可选地仅在请求诸如获取资源的细节的特定方法时。我尝试通过覆盖脱水方法来实现这一点,但我成功了,但感觉非常hackish,我想知道是否有最好的做法。

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

0 个答案:

没有答案