我正在通過現有的Web服務(RESTful API)實現DRF的分頁。現在我從DRF分頁文檔中學到了分頁是自動應用於ListCreateAPIView的,只需要在settings.py文件中添加一些行。unbound方法get_queryset()必須以WorkoutList實例作爲第一個參數調用(沒有任何代替)
所以我根據文檔和我的web服務做了更改,我希望我的queryset是動態的。 下面是修改完成:
urls.py
url(r'^users/(?P<pk>[0-9]+)/workouts/get/$',
ListCreateAPIView.as_view(WorkoutList.get_queryset(), 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):
workout_instance = WorkoutList()
workout_instance.get_queryset()
query_params = self.request.QUERY_PARAMS.dict()
if 'date' in query_params and 'exclude_app_install_time' in query_params:
query_set = Workout.objects.filter(created__contains=date).exclude(
app_install_time=query_params['exclude_app_install_time'])
else:
query_set = {}
return query_set
def list(self, request, *args, **kwargs):
workouts = self.get_queryset()
serializer = WorkoutSerializer(workouts, many=True)
return Response(serializer.data)
PS:我已經stackoverflowed(雙關語intented)的問題,但不能找到正確的解決方案。
另外我想在DRF中實現OffsetLimitPagination。一個小例子的鏈接將有幫助
啊,我沒有注意到你也覆蓋了'list'方法。沒有必要那樣做;完全刪除該方法。 –
我完全錯過了我必須添加用戶的Id,即從URL URL。我嘗試了'Workout.objects.filter(created__contains = date,user = self.args ['pk'])''。但無法讓它工作 –
當然'pk'是WorkoutList的主鍵,而不是用戶?我想你想'user = self.request.user'。如果這不起作用,請發佈一個新問題。 –