Django Project在请求中解析参数

时间:2016-10-08 00:40:46

标签: python django extjs django-rest-framework

我从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

screen

问题:如何使用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项目中对服务器端数据进行排序和过滤的最佳方法,请分享您的想法或参考。

2 个答案:

答案 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然后向服务器和服务器发送请求以执行最少数量的操作以检索请求参数。或者在服务器端解析请求参数。