4

URLにはいくつかのquery_paramsがあり、このURLにページ番号を適用しました。Djanoの条件付きクエリセットジェネリック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 

日付paramはない場合は今、私はそこに何もしないし、ちょうど4XXのHttpを返す日付の周りにブロックを除いてみてくださいとしていますステータスコード。また、パラメタがない場合は、4xxのステータスコードが返されます。

条件ブロックの両方に障害が発生し、それがquery_setを返すと、このquery_setを実行している

クエリセット= Workout.objects.all() マイワークアウトテーブルは、数百万のエントリが含まれていると私はしたくない場合にはテーブル全体を返す。それは壊滅的なことだ。

例外または条件ブロックのいずれかが、その後だけ4XXを返すことに失敗した場合ので、私は、簡単な言葉で本

elif query_param is None: 
     query_set = None 

ような別の条件ブロックを追加しました。

答えて

3

を使用して、EmptyQuerySetを返します。例外または条件ブロックのいずれかが失敗した場合。

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