有没有办法在tastypie中访问build_filters覆盖中发起请求的用户。
我想使用登录用户为其中一个过滤器提供上下文,例如过滤器包含单词Home,我想将其用作查找请求用户位置以查找其家庭地址。
如果构建过滤器将请求作为参数,这将很容易,因为我可以简单地调用
request.user.get_profile().userlocation_set.get(name_iexact=filters['location'])
无论如何都要强制用户进入过滤器列表,或者在将参数传递给build_filters之前丰富get参数。
答案 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).")
目前有一个关于此更改的公开拉取请求:
答案 1 :(得分:0)
我还没有办法做到这一点。我通常通过将代码添加到会话可用的apply_authorization_limits中来“欺骗”。