0

我想在 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它在显示给 api 用户之前从 uri 中删除名称。我还可以检查请求路径以查看正在查看的资源,但这并不理想,因为它需要硬编码的 uri。

所以问题是如何根据资源是仅显示为 URI 还是显示为完全详细的视图来显示自定义 URI。

4

1 回答 1

0

不会这么快接受我自己的答案,但我目前的解决方案似乎有效:

  • 在 中get_resource_uri,使用名称作为元组构建完整的 uri
  • in 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 ''

我认为这是可行的,因此每当调用 的详细视图时UserResourcedehydrate_resource_uri也会调用并运行 ,但不是只需要 uri 本身。

于 2013-05-29T16:40:20.960 回答