【发布时间】:2014-05-31 10:29:05
【问题描述】:
我有一个通用的ListCreateAPIView 视图。我已经实现了一个执行搜索的get_queryset 函数。该函数解析查询,提取标签和术语并返回查询集。
def get_queryset(self):
query = self.request.QUERY_PARAMS.get('query', None)
# No deleted items
queryset = Items.objects.filter(deleted__isnull=True)
if query is None:
return queryset
predicates = []
# Generate predicates from query
queryset = queryset.filter(reduce(__and__,predicates))
return queryset
使用来自get_queryset 函数的数据将元数据添加到响应中的最佳方法是什么?
我正在寻找类似于分页工作方式的东西。
{
query : {
terms : ['term1','term2'],
tags : ['tag1','tag2'] ,
}
results : [
{ name : 'item1', .... }
{ name : 'item2', .... }
]
}
编辑
所以我为过滤创建了一个自定义FilterBackend,现在我有了一个请求和响应的实例。查看 django rest 的分页代码,我看到它正在将结果包装在序列化程序中。分页被构建到视图类中,因此如果检测到分页器,fw 会调用序列化。看搜索 api 并没有产生任何新的想法。
我的问题仍然是,将元数据从过滤器后端添加到响应中的最佳且干扰最小的方式是什么?
我能想到的一种方法(也是我不喜欢的一种方法)是将元数据重载到过滤器后端的请求中,并在视图中覆盖 finalize_response - 毫无疑问,这是最糟糕的方法。
【问题讨论】:
标签: django django-rest-framework