【问题标题】:Modify TastyPie resource queryset with information in filters使用过滤器中的信息修改 TastyPie 资源查询集
【发布时间】:2018-01-12 15:38:33
【问题描述】:

我有一种情况,我想根据传入的过滤器修改资源的查询集。

我想要这个,因为某些过滤器需要将昂贵的操作添加到查询集中,并且我只想在用户请求相关过滤器时才执行它们。

文档 (HERE) 向您展示了如何使用 get_object_list(可以访问请求)修改查询集。

我想做这样的事情:

类 MyResource(ModelResource):

def get_object_list(self, request):
    current_qs = super(MyResource, self).get_object_list(request)
    current_filters = SOMEHOW_GET_FILTERS(request)

    if 'name' in current_filters:
        current_qs = current_qs.annotate(best_friend=RawSQL("COMPLICATED SQL QUERY"))

    return current_qs

有什么想法吗?如果我可以在不中断请求/响应周期的其余部分的情况下从 get_object_list 执行 build_filters,那可能会解决我的问题。任何方向表示赞赏。

【问题讨论】:

    标签: django tastypie


    【解决方案1】:

    希望有人能提供更好的答案,但是: 我检查了request 对象,发现它有一个存储queryDict 的request['GET'] 字段。

    所以,如果你打电话给localhost:8000/api/dosomething?first_name=stevie&last_name=wonder

    然后request['GET'].keys() 将返回['first_name,' 'last_name']

    就我的目的而言,这就足够了。您可能想将其传递给 self.build_filters,但我不需要。

    【讨论】:

      猜你喜欢
      • 2012-07-11
      • 2019-06-16
      • 2021-10-23
      • 2013-11-30
      • 2011-10-27
      • 1970-01-01
      • 1970-01-01
      • 2016-04-12
      • 2021-09-24
      相关资源
      最近更新 更多