Python 必须使用WorkoutList实例作为第一个参数调用未绑定的方法get_queryset()(改为不获取任何内容)

Python 必须使用WorkoutList实例作为第一个参数调用未绑定的方法get_queryset()(改为不获取任何内容),python,django,pagination,django-rest-framework,Python,Django,Pagination,Django Rest Framework,我正在现有的web服务(RESTfulAPI)上实现DRF的分页。现在,我从DRF分页的文档中了解到,分页是自动应用于ListCreateAPIView的,只需要在settings.py文件中添加一些行 因此,我根据文档进行了更改,对于我的Web服务,我希望queryset是动态的。 以下是所做的更改: url.py url(r'^users/(?P<pk>[0-9]+)/workouts/get/$', ListCreateAPIView.as_view(Worko

我正在现有的web服务(RESTfulAPI)上实现DRF的分页。现在,我从DRF分页的文档中了解到,分页是自动应用于ListCreateAPIView的,只需要在settings.py文件中添加一些行

因此,我根据文档进行了更改,对于我的Web服务,我希望queryset是动态的。 以下是所做的更改:

url.py

url(r'^users/(?P<pk>[0-9]+)/workouts/get/$',
        ListCreateAPIView.as_view(WorkoutList.get_queryset(), serializer_class=WorkoutSerializer), name='list'),
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:我已经(双关语)溢出了问题,但找不到正确的解决方案


我还想在DRF中实现OffsetLimitPagination。一个小的示例链接将很有帮助

您正在做一些非常奇怪的事情

如果对视图进行子类化,则应该在URL中使用该子类,而不是原始类和子类中的方法的奇怪混搭。因此:

url(r'^users/(?P<pk>[0-9]+)/workouts/get/$',
        WorkoutList.as_view(serializer_class=WorkoutSerializer), name='list'),
编辑我猜分页不起作用,因为您是从一个空白的训练查询开始,而不是使用超级调用返回的值。所以你应该:

def get_queryset(self):
    query_set = super(WorkoutList, self).get_queryset()
    query_params = self.request.QUERY_PARAMS.dict()
    if 'date' in query_params and 'exclude_app_install_time' in query_params:
        query_set = query_set.filter(created__contains=date).exclude(
            app_install_time=query_params['exclude_app_install_time'])
    return query_set

啊,我没有注意到您也重写了
列表
方法。没有必要这样做;完全删除该方法。我完全忽略了我必须从URL添加用户Id,即pk。我尝试了
Workout.objects.filter(创建的\uu contains=date,user=self.args['pk'])
。但是无法让它工作肯定
pk
是工作列表的主键,而不是用户?我想你想要
user=self.request.user
。如果这不起作用,请发布一个新问题。我读了你对另一个问题的一个答案。我刚刚使用了
self.kwargs['pk']
def get_queryset(self):
    query_set = super(WorkoutList, self).get_queryset()
    query_params = self.request.QUERY_PARAMS.dict()
    if 'date' in query_params and 'exclude_app_install_time' in query_params:
        query_set = query_set.filter(created__contains=date).exclude(
            app_install_time=query_params['exclude_app_install_time'])
    return query_set