我正在使用 django-filter与 django-rest-framework我正在尝试实例化一个过滤器,该过滤器接受用于过滤查询集的数字列表
class MyFilter(django_filters.FilterSet):
ids = django_filters.NumberFilter(name='id',lookup_type='in')
class Meta:
model = MyModel
fields = ('ids',)
class MyModelViewSet(viewsets.ModelViewSet):
queryset = MyModel.objects.all()
serializer_class = MyModelSerializer
filter_class = MyFilter
如果我传入逗号分隔的整数列表,则过滤器将被完全忽略。
如果我传入一个整数,它会通过 django-filter 进入 django 的表单验证器并提示:
'Decimal' object is not iterable
有没有办法创建一个 django-filter 对象,它可以处理整数列表并正确过滤查询集?
最佳答案
无论好坏,我为此创建了一个自定义过滤器:
class IntegerListFilter(django_filters.Filter):
def filter(self,qs,value):
if value not in (None,''):
integers = [int(v) for v in value.split(',')]
return qs.filter(**{'%s__%s'%(self.name, self.lookup_type):integers})
return qs
使用方式如下:
class MyFilter(django_filters.FilterSet):
ids = IntegerListFilter(name='id',lookup_type='in')
class Meta:
model = MyModel
fields = ('ids',)
class MyModelViewSet(viewsets.ModelViewSet):
queryset = MyModel.objects.all()
serializer_class = MyModelSerializer
filter_class = MyFilter
现在我的界面接受以逗号分隔的整数列表。
关于django-rest-framework - 可以通过 django-filter URL 解析器做一个 `in` `lookup_type` 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24041639/