我有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模型的过滤器的分页。我如何才能做到这一点?
我试过查找每个产品只有一个图像,但我找不到解决方案。
1条答案
按热度按时间yjghlzjz1#
要实现此功能,您可以为ProductImages视图创建一个自定义分页类,允许您分别控制
Product
和ProductImages
模型的分页。下面是相同的代码:1.为
ProductImages
定义自定义分页类:1.在
ProductImages
视图中,将分页类设置为NoPagination
,以禁用此特定视图的分页:现在,对于
ProductImages
视图,分页将被关闭,您可以检索产品的所有关联图像。Product
视图仍将使用默认分页设置。