Tastypie build_filters访问tp request.user

时间:2012-06-24 13:33:16

标签: tastypie

有没有办法在tastypie中访问build_filters覆盖中发起请求的用户。

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

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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