【问题标题】:Django - Tastypie provide summary of data returnedDjango - Tastypie 提供返回数据的摘要
【发布时间】:2018-03-23 08:35:16
【问题描述】:

您好,我有一个名为 employees 的资源,它有 10 列。如何创建一个 /employees/summary/ 端点,它只返回 5 列,但具有主 /employees/ 端点的所有功能,例如过滤器和排序。我试图做的是修改 get_list() 的结果,但这很困难。

class EmployeeResouece(ModelResource):
    class Meta:
        queryset = Employees.objects.all()
        resource_name = 'employees'
        allowed_methods = ['get','post','put','patch']
    def prepend_urls(self):
        return [
            url(r"^(?P<resource_name>%s)/summary%s$" % (self._meta.resource_name, trailing_slash()), self.wrap_view('summary'), name="summary"),
        ]
    def summary(self, request, **kwargs):
        result=EmployeeResouece().get_list(request)
### LIMIT COLUMNS TO 5###
        return result

【问题讨论】:

    标签: python django tastypie


    【解决方案1】:

    通过将get_list方法的代码粘贴到resources.py中找到了解决方案

    base_bundle = self.build_bundle(request=request)
            objects = self.obj_get_list(bundle=base_bundle, **self.remove_api_resource_names(kwargs))
            sorted_objects = self.apply_sorting(objects, options=request.GET)
    
        paginator = self._meta.paginator_class(request.GET, sorted_objects, resource_uri=self.get_resource_uri(), limit=self._meta.limit, max_limit=self._meta.max_limit, collection_name=self._meta.collection_name)
        to_be_serialized = paginator.page()
    
        # Dehydrate the bundles in preparation for serialization.
        bundles = [
            self.full_dehydrate(self.build_bundle(obj=obj, request=request), for_list=True)
            for obj in to_be_serialized[self._meta.collection_name]
        ]
    
        whitelist_columns=['id','name','dept']
        for bundle in bundles:
            bundle.data = { k : v for k,v in bundle.data.items() if k in whitelist_columns}
    
        to_be_serialized[self._meta.collection_name] = bundles
        to_be_serialized = self.alter_list_data_to_serialize(request, to_be_serialized)
        return self.create_response(request, to_be_serialized)
    

    不是最好的方法,因为我没有使用 in build excludes 或 fields 元数据。但它有效。如果需要详细级别的实现,添加 prepend_url 并更改 get_detail 中的代码,您的 url 正则表达式需要处理主键

    【讨论】:

      猜你喜欢
      • 2012-04-25
      • 1970-01-01
      • 2013-02-17
      • 2018-09-01
      • 2012-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多