1

Ich bin retreiend Category und seine Liste. Mein Problem ist, es gibt zu viele gehören zu einem category.So paginieren Sie Abfrage-Set für Serializer

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 

Können wir Paginieren es so, dass Benutzer zuerst 24 outfits sehen und erfrischen den Rest outfits zu sehen?

+0

Ich denke, die einfache Lösung ist api Verfahren schaffen die Paginierung mit Filter nach Kategorie erhalten –

+0

Meinen Sie. .. 'obj.outfits [offset: (offset + page_size)]'? –

Antwort

2

Wenn Sie einfache Bedingung "zuerst 24" und "den Rest" wollen. Du kannst es kontrollieren, indem du Parameter holst.

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 

Jetzt können Sie /categories/ für Kategorien mit ersten 24 Outfits verwenden GET und GET /categories/?show_all=true für die vollständige Darstellung

+0

Ich denke, das ist eine gute Idee. Danke, Ivan. –

+0

@JohnBaek froh, dass es dir gefällt :) –

Verwandte Themen