我想在UserResource URI中包含用户名,但仅限于将资源列为Full=False
时。
我试图覆盖dehydrate_resource_uri
,但这仅适用于查看资源的详细信息视图时,我已尝试覆盖get_resource_uri
,但我不知道如何检测是否资源切换为Full
与否,UserResource始终被视为api_dispatch_detail
,即使它显示为另一个资源的字段。
以下是GroupResource的示例,其中UserResource是嵌套的,我想要显示的内容
{
id: 1,
resource_uri: "/api/v2/group/1/",
users: [
[
"/api/v2/user/8/",
"First_name Last_name" #this is what I'd like to have added
],
[
"/api/v2/user/9/",
"First_name Last_name" #this is what I'd like to have added
]
}
然后UserResource详细信息页面不应显示名称:
{
id: 1,
first_name: "",
last_name: "",
resource_uri: "api/v2/user/1/", #no names needed here, since I've already got their name
}
棘手的部分是在UserResource的详细视图中,我不需要在resource_uri
中显示他们的名字和姓氏,虽然我知道我可以使用dehydrate_resource_uri
删除名称从uri显示到api用户之前。我还可以检查请求路径以查看正在查看的资源,但这不是想法,因为它需要硬编码的uri。
所以问题是如何根据资源是仅显示为URI还是显示完全详细的视图来显示自定义URI。
答案 0 :(得分:0)
不会很快接受我自己的回答,但我目前的解决方案似乎有效:
get_resource_uri
中,使用名称作为元组构建完整的uri 在dehydrate_resource_uri
中,只返回uri元组中的第一个元素
def dehydrate_resource_uri(self, bundle):
"""
For the automatically included ``resource_uri`` field, dehydrate
the URI for the given bundle.
Returns empty string if no URI can be generated.
"""
try:
uri= self.get_resource_uri(bundle)
return uri[0]
except NotImplementedError:
return ''
except NoReverseMatch:
return ''
def dehydrate_resource_uri(self, bundle):
try:
uri= self.get_resource_uri(bundle)
return uri[0] #return only uri
except NotImplementedError:
return ''
except NoReverseMatch:
return ''
我认为这样做是为了无论何时调用UserResource
的详细视图,dehydrate_resource_uri
也会被调用并运行,但不需要只需要uri本身。