如何对序列化程序的查询集进行分页
Posted
技术标签:
【中文标题】如何对序列化程序的查询集进行分页【英文标题】:How to paginate queryset for Serializer 【发布时间】:2018-06-01 18:19:03 【问题描述】:我正在检索Category
及其outfits
列表。我的问题是有太多outfits
属于category
。
class CategoryListAPIView(generics.RetrieveAPIView):
serializer_class = CategoryDetailSerializer
...
class CategoryDetailSerializer(serializers.ModelSerializer):
outfits = serializers.SerializerMethodField()
...
class Meta:
model = Category
fields = (
...
'outfits',
...
)
def get_outfits(self, obj): //This is returning 39 items.
// Can we paginate this?
if obj.outfits is not None:
return OutfitListSerializer(obj.outfits, many=True).data
return None
我们能否对其进行分页,以便用户首先看到 24 个outfits
并刷新以查看outfits
的其余部分?
【问题讨论】:
我认为简单的解决方案是创建 api 方法来获取按类别过滤的分页 你是说...obj.outfits[offset : (offset+page_size)]
?
【参考方案1】:
如果您想要简单的条件“前 24”和“其余”。您可以通过获取参数来控制它。
def get_outfits(self, obj):
show_all = self.request.GET.get('show_all')
if show_all:
outfits = obj.outfits.all()
else:
outfits = obj.outfits.all()[:24]
return OutfitListSerializer(outfits, many=True).data
现在您可以使用 GET /categories/
获取前 24 套服装的类别,使用 GET /categories/?show_all=true
获取完整展示
【讨论】:
以上是关于如何对序列化程序的查询集进行分页的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 sklearn post-cross_val_predict 模型对另一个缩放数据集进行预测?以及模型是不是可以序列化?