Django-filter: 带有方法的 django_filters.BooleanFilter 和从模型继承的布尔过滤器不能以相同的方式工作。

创建于 2017-04-24  ·  3评论  ·  资料来源: carltongibson/django-filter

我遇到了一个问题,即由 django_filters.BooleanFilter 创建的布尔过滤器需要不同的查询参数与从模型继承的布尔过滤器。
从模型继承的布尔过滤器期望参数为真或假,由 BooleanFilter 创建的过滤器期望参数为:
1 - 翻译为“未设置”
2 - 翻译为“真”
3 - 翻译成“假”
这种行为使我们不清楚如何从 javascript 端处理 rest api 自定义过滤器。

示例代码:

模型.py:
class TestModel(models.Model): first = models.BooleanField() last = models.BooleanField()
api.py

`导入 django_filters
从 rest_framework 导入视图集、序列化器
从 .models 导入 TestModel

类 TestFilter(django_filters.rest_framework.FilterSet):
first_and_last = django_filters.BooleanFilter(method='first_and_last_filter')
def first_and_last_filter(self, queryset, name, value):
如果值==真:
返回 queryset.filter(first=True, last=True);
返回查询集;
元类:
模型 = 测试模型
字段 = ['first', 'last', 'first_and_last']

类 TestSerializer(serializers.ModelSerializer):
元类:
模型 = 测试模型
字段= ['第一个','最后一个']

类 TestViewSet(viewsets.ModelViewSet):
模型 = 测试模型
查询集 = TestModel.objects.all()
serializer_class = TestSerializer
filter_backends = (django_filters.rest_framework.DjangoFilterBackend,)
filter_fields = ('first', 'last', 'first_and_last', )
filter_class = TestFilter`

此处的测试视图集过滤器期望查询参数对于“first”和“last”字段为“true”或“false”,但对于“first_and_last”过滤器字段期望它为 1,2 或 3。
例如过滤查询冷是这样的:
/api/test/?first=true&first_and_last=2

这是我在实际项目中遇到的一个简化示例,自定义过滤器包含更复杂的逻辑。
我已经使用重现问题所需的所有代码设置了 repo。
https://github.com/inakrin/boolfilter

最有用的评论

嗨@inakrin。 您应该从rest_framework子包中导入filters

https://github.com/carltongibson/django-filter/blob/develop/django_filters/rest_framework/filters.py

所有3条评论

嗨@inakrin。 您应该从rest_framework子包中导入filters

https://github.com/carltongibson/django-filter/blob/develop/django_filters/rest_framework/filters.py

所以它可能应该在 DRF 文档中提到,因为他们建议从过滤器导入:
http://www.django-rest-framework.org/api-guide/filtering/#specifying -a-filterset
它当然适用于除 BooleanFilter 之外的所有情况。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

Alexx-G picture Alexx-G  ·  4评论

jwineinger picture jwineinger  ·  3评论

chromakey picture chromakey  ·  5评论

madelyneriksen picture madelyneriksen  ·  4评论

csarcom picture csarcom  ·  3评论