【发布时间】:2018-02-23 22:05:36
【问题描述】:
我有两个这样定义的模型:
class House(models.Model):
# all the fields here
def capacity(self):
capacity = 0
for room in self.rooms.all():
capacity += room.capacity
return capacity
class Room(models.Model):
house = models.ForeignKey(
House,
on_delete=models.CASCADE,
related_name='rooms'
)
capacity = models.PositiveIntegerField(
default=1
)
我需要的是使用restframework中的所有数字查找(lt,lte,gt,gte,范围,精确)按容量过滤房屋,我这样做了:
import rest_framework_filters as filters
def capacity_filter(qs, name, value):
# filter implementation here
class HouseFilter(filters.FilterSet):
capacity = filters.NumberFilter(
method=capacity_filter
)
class Meta:
fields = ('capacity',)
class HouseViewSet(viewsets.ModelViewSet):
filter_class = HouseFilter
# other attrs here
它有效,但仅适用于精确值,我无法使用 __gt 或 __lt 进行过滤,我尝试使用 NumberFilter 中的 lookup_expr 参数但不起作用。
【问题讨论】:
标签: django django-rest-framework django-filter