使React-redux从分页后端获取所有数据

时间:2019-06-03 17:37:45

标签: django reactjs django-rest-framework react-redux

我有一个正在为公司开发的应用程序,可以将数据从旧系统转换为新系统。它具有Django Rest Framework后端,该前端具有react / redux支持的前端。从功能上讲,程序可以执行我想要的操作,但是它不想提取所有数据。后端API分页大小为200。前端有自己的分页,因此不会一次显示所有约40k的结果。但是我确实希望它可以将所有这些结果加载到道具中,以便可以在其中搜索所需的确切项目。这可能不是解决此问题的最佳方法,但这是我的第一个全栈应用程序,因此现在就可以使用。

我尝试仅从后端删除页面大小,因为我的用户都不会看到它。在较小的数据集上,此方法很好。但是,一旦我开始从更大的数据集中提取数据,它就会抱怨查询参数由于某种原因而不符合预期,除非我分页。

以下是我认为相关的代码。如果您需要更多,请告诉我。

前端:

//Get request sent out to the back end.
//Returns 200 results to my state right now
//Should be returning 40k results total and paginating 
export const getQuotes = () => dispatch => {
  axios
    .get("http://localhost:8000/api/quotes/")
    .then(res => {
      dispatch({
        type: GET_QUOTES,
        payload: res.data.data
      });
    })
    .catch(err => console.log(err));
};


后端:

#this is just the viewset used. I filter and pre-fetch some data. 
#currently on the backend I can see 200 pages of 200 results each
#as well as specify an ID to get a single detailed view
class QuoteinfoApiViewset(viewsets.ModelViewSet):
    queryset = Quoteinfo.objects.all()
    serializer_class = QuoteinfoSerializer


    def get_queryset(self):
        self.queryset =  Quoteinfo.objects.prefetch_related('lines', 'lines__lineasm', 'lines__linemat').filter(quotedate__gte= datetime(2017,1, 1))
        return self.queryset

REST框架的Django设置

#right here is where I set the page size
#somewhere between here and the front end
#it mistakes this for me only wanting 200 results total
#even though the backend returns the proper results
REST_FRAMEWORK = {
   'PAGE_SIZE': 200,  

  'EXCEPTION_HANDLER': 
    'rest_framework_json_api.exceptions.exception_handler',

  'DEFAULT_PAGINATION_CLASS':    'rest_framework_json_api.pagination.JsonApiPageNumberPagination',
'DEFAULT_PARSER_CLASSES': (
    'rest_framework_json_api.parsers.JSONParser',
    'rest_framework.parsers.FormParser',
    'rest_framework.parsers.MultiPartParser'
  ),
'DEFAULT_RENDERER_CLASSES': (
    'rest_framework_json_api.renderers.JSONRenderer',
    'rest_framework.renderers.BrowsableAPIRenderer',
   ),
'DEFAULT_METADATA_CLASS': 'rest_framework_json_api.metadata.JSONAPIMetadata',
'DEFAULT_FILTER_BACKENDS': (
     'rest_framework.filters.OrderingFilter',
    ),
'ORDERING_PARAM': 'sort',

   'TEST_REQUEST_RENDERER_CLASSES': (
     'rest_framework_json_api.renderers.JSONRenderer',
    ),

   'TEST_REQUEST_DEFAULT_FORMAT': 'json'
}

基本上,我的后端页面大小是200。在后端,我有200页,每个页面200个项目。在我的前端,我总共只有200个结果。就像只拉第一页一样。

0 个答案:

没有答案