首页 文章

Django REST框架 - 组合和分页多个模型

提问于
浏览
2

我正在使用Django REST Framework并尝试将两个模型 TweetArticle 组合到一个列表中 - Feed . 我希望 Feed 是一个列表API视图,按时间顺序列出 TweetArticle 对象,这是我到目前为止所做的 . 这是我的代码......

class FeedViewSet(viewsets.ModelViewSet):

    permission_classes = (AllowAny,)
    serializer_class = FeedSerializer
    paginate_by = 10

    def list(self, request, *args, **kwargs):
        results_list = list(chain(NewsArticle.objects.all(),
                            Tweet.objects.all()))
        sorted_list = sorted(results_list, key=lambda instance: instance.date_added)

        results = list()
        for entry in sorted_list:
            item_type = entry.__class__.__name__.lower()
            if isinstance(entry, Tweet):
                serializer = TweetSerializer(entry)
            if isinstance(entry, Article):
                serializer = ArticleSerializer(entry)
            data_dict = {'item': item_type, 'data': serializer.data}
            results.append(data_dict)

        feed_ser = FeedSerializer(results, many=True)
        return Response(feed_ser.data)

这可以解决我在我设置的API endpoints 上访问数据的问题,但是分页不适用于此设置 - 所有项目都返回时没有分页选项 .

我跟着this solution但是我已经尝试了两种方法,而且我对两者的分页都没有运气 .

EDIT: 我知道一个明显的解决方案是构建一个他们继承的基类,并查询该表/对象,但遗憾的是这不是一个选项 .

谢谢您的帮助!

1 回答

  • 0

    您的代码不适用于分页,因为您没有从父类调用方法列表 . 这是根据您的查询集进行分页的位置(在ListModelMixin中查看here列表方法)

    如果你想分页,我会看到两个选项:

    • 根据在DRF中实现的方式自己实现它(上面的链接)

    • 或者在get_queryset方法中移动构建查询集(结果)的所有代码,并让框架执行分页 .

    祝好运 .

相关问题