Django 分页泛型 LISTCREATEAPIview 中的条件 query_set
Condtional query_set in Djano Pagination generic LISTCREATEAPIview
我有一个 URL,里面有一些 query_params,我已经在这个 URL 上应用了分页。
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
现在我已经尝试除了日期周围的块,如果没有日期参数,什么也不做,只是 return 4xx Http 状态代码。此外,如果没有参数,则只有 return 和 4xx 状态代码。
如果两个条件块都失败,则 returning query_set 并执行此 query_set
queryset = Workout.objects.all()
My Workout tables contain millions of entries and I don't want to return the whole table. That would be catastrophic.
所以我添加了另一个这样的条件块
elif query_param is None:
query_set = None
简单来说,如果任何异常或条件块失败,那么只是 return 4xx。
当任何异常或条件块失败时,您可以使用 QuerySet.objects.None()
return 和 EmptyQuerySet
。
# return empty queryset
queryset = Workout.objects.none()
我有一个 URL,里面有一些 query_params,我已经在这个 URL 上应用了分页。
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
现在我已经尝试除了日期周围的块,如果没有日期参数,什么也不做,只是 return 4xx Http 状态代码。此外,如果没有参数,则只有 return 和 4xx 状态代码。
如果两个条件块都失败,则 returning query_set 并执行此 query_set
queryset = Workout.objects.all() My Workout tables contain millions of entries and I don't want to return the whole table. That would be catastrophic.
所以我添加了另一个这样的条件块
elif query_param is None:
query_set = None
简单来说,如果任何异常或条件块失败,那么只是 return 4xx。
当任何异常或条件块失败时,您可以使用 QuerySet.objects.None()
return 和 EmptyQuerySet
。
# return empty queryset
queryset = Workout.objects.none()