为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕桂英546537 2021-09-24 15:08:26
我有这个模型: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=
查看完整描述

2 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

您必须根据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)



查看完整回答
反对 回复 2021-09-24
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

一般来说,查询看起来像:


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



查看完整回答
反对 回复 2021-09-24
  • 2 回答
  • 0 关注
  • 209 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信