【问题标题】:How to add pagination : super()如何添加分页:super()
【发布时间】:2021-09-02 14:20:16
【问题描述】:

我正在尝试在模型视图集中使用 super().list() 方法添加分页

class RecentlyViewedVideosViewSet(ResponseViewMixin, mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):
    queryset = RecentlyViewedVideos.objects.all()
    serializer_class = RecentlyViewedVideosSerializer

    def list(self, request, **kwargs):
        print('list')
        try:
            if 'learner_id' in self.kwargs:
                learner_id = self.kwargs['learner_id']
            else:
                learner_id = self.request.learner.id
            response_data = super().get_queryset().filter(learner_id=learner_id)
            print(response_data)
            serializer = RecentlyViewedVideosSerializer(response_data, many=True)
            return self.jp_response(s_code='HTTP_200_OK', data=serializer.data)

在输出中,它显示了表格中的所有文档,但我只需要“详细信息”中的那些细节,给我一个获得准确输出的方法。

【问题讨论】:

    标签: python-3.x django django-models django-rest-framework


    【解决方案1】:

    .get_queryset(…) 方法中这样做可能会更好:

    def get_queryset(self):
        if 'learner_id' in self.kwargs:
            learner_id = self.kwargs['learner_id']
        else:
            learner_id = self.request.learner.id
        return super().get_queryset().filter(learner_id=learner_id)

    那么对视图进行过滤、分页等的样板代码还是由ListModelMixin.list(…)方法实现的。

    【讨论】:

    • 输出正确,但分页不起作用
    • @user15361826:你启用分页了吗?你能edit这个问题并分享完整的APIView吗?
    • @user15361826:您正在覆盖 wrong 方法。您应该覆盖 get_queryset 方法。呈现 HTTP 响应的逻辑是由 ListModelMixin 实现的样板代码,它还将执行分页和额外过滤。
    • 感谢您的帮助和新信息。
    猜你喜欢
    • 1970-01-01
    • 2014-05-10
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 2015-12-20
    相关资源
    最近更新 更多