1

有什么方法可以访问在美味派中在 build_filters 覆盖中发起请求的用户。

我想使用登录用户为其中一个过滤器提供上下文,例如过滤器包含 Home 一词,我想用它来查找请求用户的位置以找到他们的家庭地址。

如果构建过滤器将请求作为参数,这将很容易,因为我可以简单地调用

request.user.get_profile().userlocation_set.get(name_iexact=filters['location'])

无论如何强制用户进入过滤器列表,或者在将参数传递给 build_filters 之前丰富获取参数。

4

2 回答 2

1

仍然没有一个很好的方法。我目前正在obj_get_list像这样覆盖,以便我可以手动将捆绑对象传递给build_filters

def obj_get_list(self, bundle, **kwargs):
    filters = {}

    if hasattr(bundle.request, 'GET'):
        filters = bundle.request.GET.copy()

    filters.update(kwargs)
    applicable_filters = self.build_filters(filters=filters, bundle=bundle)

    try:
        objects = self.apply_filters(bundle.request, applicable_filters)
        return self.authorized_read_list(objects, bundle)
    except ValueError:
        raise BadRequest("Invalid resource lookup data provided (mismatched type).")

目前有一个针对此更改的公开拉取请求:

https://github.com/toastdriven/django-tastypie/pull/901

于 2013-12-20T14:25:05.010 回答
0

我还没有找到办法做到这一点。我通常通过将代码添加到会话可用的 apply_authorization_limits 来“作弊”。

于 2012-07-04T11:32:24.163 回答