1

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

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

暴露的“入口”资源如下所示:

{
    "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 列表,如果关系是“ ToMany ”)。dehydrate_user在类中添加一个方法EntryResource来做到这一点是个好主意吗?它似乎有效,但也许有一种更通用的方法(以避免必须dehydrate为每个关系编写一个方法)

先感谢您

4

1 回答 1

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

于 2012-11-16T15:34:47.990 回答