我从ExtJS应用程序请求我的django项目:
GET /products/?page=1&start=0&limit=25&sort=%5B%7B%22property%22%3A%22id%22%2C%22direction%22%3A%22DESC%22%7D%5D
在请求中包含4个参数,其中一个是复杂的,称为 sort :
问题:如何使用Python提取参数属性和方向的值?
我这样做了,但它不起作用。我会很高兴得到任何帮助。
class ProductsList(generics.ListCreateAPIView):
serializer_class = ProductsSerializer
def get_queryset(self):
queryset = Products.objects.all()
sortParameter = self.request.query_params.get('sort', None)
column_name=sortParameter['property']
queryset = queryset.order_by(column_name)
return queryset
如果您知道在Django Rest项目中对服务器端数据进行排序和过滤的最佳方法,请分享您的想法或参考。
答案 0 :(得分:0)
可能有更优雅的解决方案,我只是拦截所有ajax请求并将sort
参数转换为适合DRF的ordering
:
Ext.Ajax.on('beforerequest', function (conn, options) {
if(options.params && options.params.sort) {
var ordering = options.params.ordering ? options.params.ordering.split(',') : [];
var sortArray = JSON.parse(options.params.sort);
sortArray.forEach(function(el){
ordering.push((el.direction == 'DESC' ? '-' : '') + el.property);
});
options.params.ordering = ordering.join(',');
}
}, this);
答案 1 :(得分:0)
我通过使用json包解决了这个问题。感谢您的建议 furas
def get_queryset(self):
queryset = Products.objects.all()
sortParameter = self.request.query_params.get('sort', None)
parsed_sort=json.loads(sortParameter)
column_name=parsed_sort[0]['property']
queryset = queryset.order_by(column_name)
return queryset
但我认为代码不是最优的?什么是最佳实践:在后端构建URL然后向服务器和服务器发送请求以执行最少数量的操作以检索请求参数。或者在服务器端解析请求参数。