Django-filter: Фильтр Contains / icontains не работает

Созданный на 16 янв. 2017  ·  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)

Клиентский фильтр в основном игнорируется. Если я заменю иконки на точные, это сработает.
Но я не могу заставить содержать или иконки для работы на каких-либо полях.

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 - не могли бы вы опубликовать образец URL-адреса с параметрами запроса? Я предполагаю, что вы запрашиваете /api/orders?status=foo вместо /api/orders?status__icontains=foo . В документации Meta.fields есть примечание, объясняющее несколько иное поведение поиска exact .

Все 4 Комментарий

Привет @xtrinch.

По описанию я не вижу проблемы. Могу ли я сообщить , что вы пытаетесь поставить контрольную точку в вашем FilterSet «s qs собственности и шаг через , чтобы видеть , что происходит.

Если бы вы могли сузить его до простого тестового примера, это тоже помогло бы.

Filter просто берет значение и строит поиск для ORM, поэтому возникает вопрос: _Что здесь не так? _

Привет, @xtrinch - не могли бы вы опубликовать образец URL-адреса с параметрами запроса? Я предполагаю, что вы запрашиваете /api/orders?status=foo вместо /api/orders?status__icontains=foo . В документации Meta.fields есть примечание, объясняющее несколько иное поведение поиска exact .

@rpkilby Спасибо. У меня создалось впечатление, что первый элемент в массиве становится фильтром по умолчанию - я вижу, что ошибался :)

ваш пост мне очень пригодился в моем проекте
Спасибо

Была ли эта страница полезной?
0 / 5 - 0 рейтинги