4

我有一个URL中有一些query_params,我已经应用分页到这个URL。在Djano中的条件query_set分页通用LISTCREATEAPIview

urls.py

url(r'^users/(?P<pk>[0-9]+)/workouts/get/$', 
     WorkoutList.as_view(serializer_class=WorkoutSerializer), name='list'), 

views.py

class WorkoutList(generics.ListCreateAPIView): 
    queryset = Workout.objects.all() 
    serializer_class = WorkoutSerializer 
    permission_classes = (UserPermissions,) 

    def get_queryset(self): 
     query_set = super(WorkoutList, self).get_queryset() 
     query_params = self.request.QUERY_PARAMS.dict() 
     try: 
      date = string_to_date_convertor(query_params['date']) 
     except KeyError: 
      print 'Exception' 
      return Response(status=status.HTTP_406_NOT_ACCEPTABLE) 

     if 'date' in query_params: 
      query_set = Workout.objects.filter(created__contains=date, user_id = self.kwargs['pk']) 

     elif 'date' in query_params and 'exclude_app_install_time' in query_params: 
      query_set = Workout.objects.filter(created__contains=date, time_reg = query_params['exclude_app_install_time'])  


     return query_set 

现在我已经尝试唯独身边日期块,如果日期参数是不是有什么也不做,只是返回4XX的Http状态码。另外,如果没有参数,只需返回4xx状态码。

如果两个条件方框的失败,它返回的query_set和执行该query_set

查询集= Workout.objects.all() 我的训练表中包含数百万条目,我不想返回整个表格。那将是灾难性的。

所以我加了另一个条件块这样

elif query_param is None: 
     query_set = None 

简单地说,如果任何例外情况或条件块的失败则直接返回4XX。

回答

3

当任何异常或条件块失败时,您可以使用QuerySet.objects.None()返回EmptyQuerySet

# return empty queryset 
queryset = Workout.objects.none()