Django-filter: 包含 / icontains 过滤器不起作用

创建于 2017-01-16  ·  4评论  ·  资料来源: carltongibson/django-filter

class OrderFilter(django_filters.FilterSet):
    class Meta:
        model = Order
        fields = {
            'status': ['exact',],
            'client': ['icontains',],
        }
class OrderViewset(viewsets.ModelViewSet):
    filter_class = OrderFilter
    permission_classes = ( permissions.IsAuthenticated, )
    serializer_class = OrderSerializer
    queryset = Order.objects.all()
    filter_backends = (
        filters.OrderingFilter,
        filters.SearchFilter,
        filters.DjangoFilterBackend
    )
    ordering_fields = ('added_at', 'status', 'client', 'order_number')
    ordering = ('-added_at',)
class Order(models.Model):
    order_number = models.CharField(max_length=255, default='')
    client = models.CharField(max_length=255, default='')
    status = models.CharField(max_length=255, default='')
    added_at = models.DateTimeField(auto_now_add=True)

客户端过滤器基本上被忽略。 如果我用精确替换 icontains,它会起作用。
但是我无法获得包含或图标以在任何领域工作。

要求.txt:

Django==1.10.4
psycopg2==2.6.2
djangorestframework==3.5.3
频道==1.0.0
djangorestframework-jwt==1.9.0
django-过滤器==1.0.1
asgi-redis==1.0.0
达芙妮==1.0.0

最有用的评论

@xtrinch - 你能发布一个带有查询参数的示例 URL 吗? 我的猜测是您正在查询/api/orders?status=foo而不是/api/orders?status__icontains=fooMeta.fields文档中有一个注释解释了exact查找的稍微不同的行为。

所有4条评论

嗨@xtrinch。

从描述中我看不出问题。 我可以建议您尝试在FilterSetqs属性中放置一个断点并逐步查看发生了什么。

如果您可以将其缩小到一个简单的测试用例,那也会有所帮助。

Filter只是获取值并为 ORM 构建查找,所以问题是,_哪里出错了?_

@xtrinch - 你能发布一个带有查询参数的示例 URL 吗? 我的猜测是您正在查询/api/orders?status=foo而不是/api/orders?status__icontains=fooMeta.fields文档中有一个注释解释了exact查找的稍微不同的行为。

@rpkilby谢谢。 我的印象是数组中的第一项成为默认过滤器 - 我发现我错了:)

你的帖子在我的项目中对我非常有用
谢谢

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