Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
2.4k views
in Technique[技术] by (71.8m points)

django - How to paginate queryset for Serializer

I'm retreiving Category and its outfits list. My problem is there are too many outfits belong to a 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

Can we paginate it so that user can first see 24 outfits and refresh to see the rest of outfits?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

If you want simple condition "first 24" and "the rest". You could control it by get parameters.

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

Now you can use GET /categories/ for categories with first 24 outfits and GET /categories/?show_all=true for full representation


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

57.0k users

...