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)
Клиентский фильтр в основном игнорируется. Если я заменю иконки на точные, это сработает.
Но я не могу заставить содержать или иконки для работы на каких-либо полях.
Requirements.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
«s 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
.