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

时间:2014-06-30 04:08:56

标签: django django-models django-rest-framework django-orm

我正在使用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端点上的数据,但是分页不适用于此设置 - 返回的所有项目都没有分页选项。

我已经关注了this solution,但我已尝试过这两种方法,而且我对两者的分页都没有运气。

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

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

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

- 要么根据它在DRF中的实现方式(上面的链接)

自己实现它

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

祝你好运。