Tastypie:不要发送整个资源(只是id)

时间:2012-11-15 17:23:16

标签: python formatting tastypie

我开始将Tastypie添加到我正在开发的一个非常小的Django应用程序中,我想知道是否有一种方法只发送一个关系指向的资源的数字id,而不是uri所在的地方资源驻留。

例如,使用documentation中提供的示例之一:

公开的“Entry”资源如下所示:

{
    "body": "Welcome to my blog!",
    "id": "1",
    "pub_date": "2011-05-20T00:46:38",
    "resource_uri": "/api/v1/entry/1/",
    "slug": "first-post",
    "title": "First Post",
    "user": "/api/v1/user/1/"
}

它与“用户”的关系显示为"user": "/api/v1/user/1/"。有没有办法让它"user": 1(整数,如果可能的话)所以它看起来如下?

{
    "body": "Welcome to my blog!",
    "id": "1",
    "pub_date": "2011-05-20T00:46:38",
    "resource_uri": "/api/v1/entry/1/",
    "slug": "first-post",
    "title": "First Post",
    "user": 1
}

我喜欢这个想法或保持整个resource_uri属性,但是当涉及到建模Sql关系时,我宁愿只有id(或者数字id的列表,如果关系是“< EM>一对多“)。将dehydrate_user方法添加到EntryResource类来执行此操作是否是个好主意?它似乎有效,但也许有更通用的方法(避免为每个关系编写dehydrate方法)

提前谢谢

1 个答案:

答案 0 :(得分:6)

您可以尝试使用水合物脱水循环

def dehydrate(self, bundle):
    bundle.data['entry'] = bundle.obj.entry.id
    return bundle

def hydrate(self, bundle):
    bundle.data['entry'] = Entry.objects.get(id=bundle.data['entry'])
    return bundle

但我强烈建议坚持使用URI,因为它是您直接寻址资源的方式。水合物和脱水用于更复杂或虚拟的资源。