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

Django - Tastypie provide summary of data returned

您好,我有一个名为 employees 的资源,它有 10 列。我如何创建一个 /employees/summary/ 端点,它只有 returns 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

通过粘贴 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)

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