mou*_*eni 5 python django django-models django-queryset django-rest-framework
我有这个模型:
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)
Run Code Online (Sandbox Code Playgroud)
视图是这样的:
class ImageViewSet(viewsets.ModelViewSet):
queryset = Image.objects.all()
serializer_class = ImageSerializer
filter_backends = (DjangoFilterBackend, OrderingFilter,)
filter_fields = ('image_name',)
ordering_fields = ('id','image_name,)
Run Code Online (Sandbox Code Playgroud)
我能够保存具有所有这些属性的图像。我想要一个这样的查询来返回高度大于 100 且小于 300 的所有图像:
GET /images/?minheight=100&maxheight=300
Run Code Online (Sandbox Code Playgroud)
如何在 Django 中实现这一点?
如果我尝试在 minheight 为空的情况下触发 api,我收到 500 服务器错误
GET /images/?minheight=
一般来说,查询如下所示:
qs = models.Image.objects.filter(image_height__gt=100, image_height__lt=300)
Run Code Online (Sandbox Code Playgroud)
这使用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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1599 次 |
最近记录: |