我开始将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
方法)
提前谢谢
答案 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,因为它是您直接寻址资源的方式。水合物和脱水用于更复杂或虚拟的资源。