我正在关注django-filters
的官方文档:https://django-filter.readthedocs.io/en/stable/guide/rest_framework.html#adding-a-filterset-with-filterset-class
我已经设置了volume
,具有ForeignKey关系filter-volume
。我想使用volume
和min_volume
获得max_volume
的过滤器,但是每次执行过滤器时,我都会得到错误的数据。
如果有人能弄清楚我做错了什么地方,那就太好了。
models.py:
class Cuboid(models.Model):
title = models.CharField(max_length=80)
volume = models.ForeignKey('FilterVolume', on_delete=models.CASCADE)
def __str__(self):
return self.title
class FilterVolume(models.Model):
volume = models.IntegerField(max_length=30)
def __unicode__(self):
return self.volume
filters.py
from django_filters import rest_framework as filters
from crud_api.models import Cuboid
class CuboidFilter(filters.FilterSet):
min_volume = filters.NumberFilter(field_name="volume", lookup_expr='gte')
max_volume = filters.NumberFilter(field_name="volume", lookup_expr='lte')
class Meta:
model = Cuboid
fields = [
'min_volume','max_volume'
]
views.py
class CuboidListApiView(generics.ListAPIView):
model = Cuboid
queryset = Cuboid.objects.all()
serializer_class = CuboidSerializer
filterset_class = CuboidFilter
答案 0 :(得分:1)
将 field_name
更改为 volume__volume
而不是volume
class CuboidFilter(filters.FilterSet):
min_volume = filters.NumberFilter(field_name="volume__volume", lookup_expr='gte')
max_volume = filters.NumberFilter(field_name="volume__volume", lookup_expr='lte')
class Meta:
model = Cuboid
fields = ['min_volume', 'max_volume']