我正在使用Django REST Framework并尝试将两个模型Tweet
和Article
合并到一个列表中 - Feed
。我希望Feed
成为列表API视图,按时间顺序列出Tweet
和Article
对象,这是我迄今为止所做的。这是我的代码......
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,但我已尝试过这两种方法,而且我对两者的分页都没有运气。
编辑:我知道一个明显的解决方案是构建一个他们继承的基类,并查询该表/对象,但不幸的是,这不是一个选项。
感谢您的帮助!
答案 0 :(得分:0)
您的代码不适用于分页,因为您没有从父类调用 list 方法。这就是根据您的查询集进行分页的位置(查看here 在ListModelMixin中的list方法
如果你想要分页,我会看到两个选项:
- 要么根据它在DRF中的实现方式(上面的链接)
自己实现它- 或者在 get_queryset 方法中移动构建查询集(结果)的所有代码,让框架进行分页。
祝你好运。