【问题标题】:Django REST Framework - Combining and paginating multiple modelsDjango REST Framework - 组合和分页多个模型
【发布时间】:2014-08-20 09:26:15
【问题描述】:

我正在使用 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,但我尝试了这两种方法,但都没有运气。

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

感谢您的帮助!

【问题讨论】:

  • 您能分享一下您是如何创建模型的吗?它们与外键有关吗?

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


【解决方案1】:

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

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

-- 要么你自己实现它,基于它在 DRF 中实现的方式(上面的链接)

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

祝你好运。

【讨论】:

    猜你喜欢
    • 2013-11-11
    • 2014-05-13
    • 1970-01-01
    • 2013-11-27
    • 2014-01-09
    • 2014-11-12
    • 2021-08-19
    • 1970-01-01
    相关资源
    最近更新 更多