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

Bor*_*jaX 1 python formatting tastypie

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

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

暴露的"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/"
}
Run Code Online (Sandbox Code Playgroud)

它与"用户"的关系显示为 "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
}
Run Code Online (Sandbox Code Playgroud)

我喜欢这个想法或者保持resource_uri属性是完整的,但是当涉及到建模Sql关系时,我宁愿只有id(或者数字id的列表,如果关系是" ToMany ").dehydrate_userEntryResource类添加方法是否是个好主意?它似乎工作,但也许有一种更通用的方式(避免必须dehydrate为每个关系编写一个方法)

先感谢您

小智 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
Run Code Online (Sandbox Code Playgroud)

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