Skip to main content
 首页 » 编程设计

python之Tastypie:不要发送资源的整个 uri(只是 id)

2025年05月04日17wayfarer

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

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

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

{ 
    "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”有关系。有什么方法可以让它变成 "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 列表,如果关系是“ToMany”)。将 dehydrate_user 方法添加到 EntryResource 类来执行此操作是否是个好主意?它似乎可行,但也许有更通用的方法(以避免为每个关系编写 dehydrate 方法)

提前致谢

请您参考如下方法:

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

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,因为这是您可以直接寻址资源的方式。 Hydrate 和 dehydrate 用于更复杂或虚拟的资源。