Django关闭/打开一个过滤器请求的分页

hkmswyz6  于 2023-10-21  发布在  Go
关注(0)|答案(1)|浏览(91)

我有2个模型,1个用于产品,1个用于ProductImages,分页设置为10。对于任何产品,我们都可以关联多个图像。

class Product(models.Model):
    title = models.CharField(max_length=200)
    details = models.TextField(null = True)
    slug = models.CharField(max_length=300, unique=True, null=True)
class ProductImages(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='product_imgs')
    image = models.ImageField(upload_to='product_imgs/', null=True)

    def __str__(self):
        return self.image.url

我的产品列表视图看起来像,

class ProductList(generics.ListCreateAPIView):
    queryset = models.Product.objects.all()
    serializer_class = serializers.ProductListSerializer
    pagination_class = pagination.PageNumberPagination

    def get_queryset(self):
        qs = super().get_queryset()
        if self.request.method == 'GET':
            if 'category' in self.request.GET:
                category = self.request.GET['category']
                category = models.ProductCategory.objects.get(id=category)
                qs = qs.filter(category=category)
            if 'owner' in self.request.GET:
                print('get_queryset Owner')
                owner = self.request.GET['owner']
                qs = qs.filter(owner=owner)
                if 'available' in self.request.GET:
                    available = self.request.GET['available'] == 'true'
                    qs = qs.filter(available=available)
            ids = []
            for product in qs:
                # images = models.ProductImages.objects.filter(id=product.id)
                print('Images: %d', product.id)
                ids.append(product.id)
            for id in ids:
                print('Id %d', id)
            images = models.ProductImages.objects.filter(product__in=ids)

我试图获取与这些产品相关的产品和图像。当我获取产品时,我会得到10个产品(按设置分页),我会得到10个图像。但问题是,我想得到所有(说)25图像与这10个产品,即。我想关闭仅用于ProductImages模型的过滤器的分页。我如何才能做到这一点?
我试过查找每个产品只有一个图像,但我找不到解决方案。

yjghlzjz

yjghlzjz1#

要实现此功能,您可以为ProductImages视图创建一个自定义分页类,允许您分别控制ProductProductImages模型的分页。下面是相同的代码:
1.为ProductImages定义自定义分页类:

from rest_framework.pagination import PageNumberPagination

class NoPagination(PageNumberPagination):
    page_size = None

1.在ProductImages视图中,将分页类设置为NoPagination,以禁用此特定视图的分页:

class ProductImagesList(generics.ListCreateAPIView):
    queryset = models.ProductImages.objects.all()
    serializer_class = serializers.ProductImagesSerializer
    pagination_class = NoPagination  # Use the Custom Pagination class

现在,对于ProductImages视图,分页将被关闭,您可以检索产品的所有关联图像。Product视图仍将使用默认分页设置。

相关问题