Django - Tastypie提供返回数据的摘要

时间:2018-03-23 08:35:17

标签: python django tastypie

您好我有一个名为employees的资源,它有10列。如何创建/ employees / summary / endpoint,它只返回5列,但具有主/ employees / endpoint的所有功能,如过滤器和排序。我试图做的是修改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

1 个答案:

答案 0 :(得分:0)

通过在resources.py

中粘贴get_list方法的代码找到解决方案
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排除或字段元数据。但它的确有效。如果需要详细级别实现,请添加prepend_url并更改get_detail中的代码,您的url正则表达式需要处理主键