猿问

在 Django rest api 中查询最小和最大大小

我有这个模型:


class Image(models.Model):

    image_name=models.CharField(max_length=30)

    image=models.ImageField(upload_to='images',width_field='image_width', height_field='image_height',)

    image_width=models.PositiveIntegerField(null=True, blank=True, editable=False)

    image_height=models.PositiveIntegerField(null=True, blank=True, editable=False)

    image_size=models.IntegerField(null=True, blank=True,editable=False)

视图是这样的:


class ImageViewSet(viewsets.ModelViewSet):

        queryset = Image.objects.all()

        serializer_class = ImageSerializer

        filter_backends = (DjangoFilterBackend, OrderingFilter,)

        filter_fields = ('image_name',)

        ordering_fields = ('id','image_name,)

我能够保存具有所有这些属性的图像。我想要这样的查询来返回高度大于 100 且小于 300 的所有图像:


GET /images/?minheight=100&maxheight=300

如何在 Django 中实现这一点?


我收到 500 服务器错误 如果我尝试在 minheight 为空的情况下启动 api GET /images/?minheight=


慕桂英546537
浏览 210回答 2
2回答

慕雪6442864

您必须根据GET参数手动过滤查询集。class ImageViewSet(viewsets.ModelViewSet):    queryset = Image.objects.all()    serializer_class = ImageSerializer    filter_backends = (DjangoFilterBackend, OrderingFilter,)    filter_fields = ('image_name',)    ordering_fields = ('id','image_name,')    def get_queryset(self):        minheight = self.request.GET.get('minheight')        maxheight = self.request.GET.get('maxheight')        return self.queryset.filter(image_height__gte=minheight, image_height__lt=maxheight)

繁星点点滴滴

一般来说,查询看起来像:qs = models.Image.objects.filter(image_height__gt=100, image_height__lt=300)这使用gt和lt字段查找。还有大于或等于 ( gte) 和小于或等于 ( lte) 的变体。class ImageViewSet(viewsets.ModelViewSet):    serializer_class = ImageSerializer    filter_backends = (DjangoFilterBackend, OrderingFilter,)    filter_fields = ('image_name',)    ordering_fields = ('id','image_name',)    def get_queryset(self):        queryset = Image.objects.all()        minheight = self.request.query_params.get('minheight', '')        maxheight = self.request.query_params.get('maxheight', '')        if(minheight and maxheight):            queryset = queryset.filter(image_height__gt=minheight,                                       image_height__lt=maxheight)        return queryset
随时随地看视频慕课网APP

相关分类

Python
我要回答