我正在使用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 endpoints 上访问数据的问题,但是分页不适用于此设置 - 所有项目都返回时没有分页选项 .
我跟着this solution但是我已经尝试了两种方法,而且我对两者的分页都没有运气 .
EDIT: 我知道一个明显的解决方案是构建一个他们继承的基类,并查询该表/对象,但遗憾的是这不是一个选项 .
谢谢您的帮助!
1 回答
您的代码不适用于分页,因为您没有从父类调用方法列表 . 这是根据您的查询集进行分页的位置(在ListModelMixin中查看here列表方法)
如果你想分页,我会看到两个选项:
根据在DRF中实现的方式自己实现它(上面的链接)
或者在get_queryset方法中移动构建查询集(结果)的所有代码,并让框架执行分页 .
祝好运 .