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。
从描述中我看不出问题。 我可以建议您尝试在FilterSet
的qs
属性中放置一个断点并逐步查看发生了什么。
如果您可以将其缩小到一个简单的测试用例,那也会有所帮助。
Filter
只是获取值并为 ORM 构建查找,所以问题是,_哪里出错了?_
嗨@xtrinch - 你能发布一个带有查询参数的示例 URL 吗? 我的猜测是您正在查询/api/orders?status=foo
而不是/api/orders?status__icontains=foo
。 Meta.fields
文档中有一个注释解释了exact
查找的稍微不同的行为。
@rpkilby谢谢。 我的印象是数组中的第一项成为默认过滤器 - 我发现我错了:)
你的帖子在我的项目中对我非常有用
谢谢
最有用的评论
嗨@xtrinch - 你能发布一个带有查询参数的示例 URL 吗? 我的猜测是您正在查询
/api/orders?status=foo
而不是/api/orders?status__icontains=foo
。Meta.fields
文档中有一个注释解释了exact
查找的稍微不同的行为。