簡體   English   中英

我如何實現多個分頁(drf)

[英]How i can realize multiple pagination(drf)

如果我要發送這樣的獲取請求,請在此處輸入圖像描述,我需要有多個分頁(LimitOffset 和 PageNumber)。

模型.py:

from django.db import models


class Products(models.Model):
    title = models.CharField(max_length=255)
    description = models.TextField(blank=True)
    photo = models.ImageField(upload_to="photos/%Y/%m/%d/", null=True)
    hashtag = models.CharField(max_length=255)
    is_hit = models.BooleanField(default=False)
    category = models.ForeignKey('Category', on_delete=models.PROTECT, null=True)

    def __str__(self):
        return self.title


class Category(models.Model):
    name = models.CharField(max_length=255)

    def __str__(self):
        return self.name

視圖.py:

from rest_framework import generics
from rest_framework.pagination import PageNumberPagination

from .models import *
from .serializers import ProductsSerializer


class PaginationProducts(PageNumberPagination):
    page_size = 2
    page_size_query_param = 'page_size'
    max_page_size = 2


class ProductsAPIList(generics.ListCreateAPIView):
    queryset = Products.objects.all()
    serializer_class = ProductsSerializer
    pagination_class = PaginationProducts

序列化程序.py

from rest_framework import serializers

from .models import *


class ProductsSerializer(serializers.ModelSerializer):

    class Meta:
        model = Products
        fields = "__all__"

    def get_photo_url(self, obj):
        request = self.context.get('request')
        photo_url = obj.fingerprint.url
        return request.build_absolute_uri(photo_url)

我需要一些可以幫助 API 客戶選擇頁數和該頁上的帖子數量的東西。 認為在這種情況下我需要 NumberPagePagination 和 LimitOffsetPagination。

我認為您不需要創建自定義分頁 class。

from rest_framework.pagination import LimitOffsetPagination

class ProductsAPIList(generics.ListCreateAPIView):
    queryset = Products.objects.all()
    serializer_class = ProductsSerializer
    pagination_class = LimitOffsetPagination

offset值對應於原始分頁中的page * sizelimit值對應於size

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM