我需要将request.POST
参数移至request.query_params
QueryDict
。
是否有接受的方法?
我正在使用带有DRF后端的数据表,它工作正常。我正在将应用程序移至集成,并且...停止工作。为什么?请求网址太大(在7000个字符范围内)-在我的开发主机中这不是问题...
因此,我正在寻找解决该问题的方法。第一种解决方案是使用POST而不是GET。可以,但是将DRF与数据表集成在一起的库无法处理POST请求的表单参数。因此,过滤,分页等已停止工作。
解决此问题最简单的方法是将表单参数放入查询参数中,并让后端像正常的GET请求一样处理请求。
这是我目前正在做的事情:
class DataViewSet(viewsets.ModelViewSet):
queryset = Data.objects.all()
serializer_class = DataSerializer
def create(self, request, *args, **kwargs):
# DataTable uses a lot of parameters which do not fit into a normal URL. To get the data we need to do POST,
# so that the parameters are sent in the body
# We hijack the create method to list the data
return self.list(request, *args, **kwargs)
答案 0 :(得分:0)
我不知道任何可接受的方法。但是,让我为您提供一个想法。可能与接受的含义相反。
rest_framework.request.Request.query_params
看起来像这样:
@property
def query_params(self):
return self._request.GET
我正在考虑将self._request.GET
替换为self._request.POST
class DataViewSet(viewsets.ModelViewSet):
queryset = Data.objects.all()
serializer_class = DataSerializer
def create(self, request, *args, **kwargs):
# DataTable uses a lot of parameters which do not fit into a normal URL. To get the data we need to do POST,
# so that the parameters are sent in the body
# We hijack the create method to list the data
request._request.GET = request._request.POST
return self.list(request, *args, **kwargs)
此应该适用于POST
数据。将文件发送到此端点可能不是一个好主意。
注意::此操作非常棘手,将来可能会引入错误。如果不查看您的代码,我将无法预测副作用。