Django-filter: Фильтрация ArrayField

Созданный на 24 авг. 2016  ·  4Комментарии  ·  Источник: carltongibson/django-filter

Можно ли фильтровать поля, определенные в django.contrib.postgres.fields например ArrayField ?

Самый полезный комментарий

В настоящее время django-filter не имеет фильтров, совместимых с полями contrib postgres - вам нужно будет создать свои собственные. Это будет более или менее сложно, в зависимости от того, что вы пытаетесь сделать. Поддержка пользовательского поиска для ArrayField была бы довольно тривиальной:

class CharArrayFilter(filters.BaseCSVFilter, filters.CharFilter):
     pass

class MyFilterSet(filters.FilterSet):
    tags__contains = CharArrayFilter(name='tags', lookup_expr='contains')

    class Meta:
        model = SomethingTaggable
GET http://localhost/api/something-taggable?tags__contains=a,b,c

Вышеупомянутый фильтр проверяет входные данные, разделенные запятыми, и возвращает список очищенных значений, который подходит для базового вызова .filter() .

С другой стороны, немного сложнее обрабатывать преобразования индекса и среза, которые неструктурированы и имеют теоретически бесконечное количество комбинаций.

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

В настоящее время django-filter не имеет фильтров, совместимых с полями contrib postgres - вам нужно будет создать свои собственные. Это будет более или менее сложно, в зависимости от того, что вы пытаетесь сделать. Поддержка пользовательского поиска для ArrayField была бы довольно тривиальной:

class CharArrayFilter(filters.BaseCSVFilter, filters.CharFilter):
     pass

class MyFilterSet(filters.FilterSet):
    tags__contains = CharArrayFilter(name='tags', lookup_expr='contains')

    class Meta:
        model = SomethingTaggable
GET http://localhost/api/something-taggable?tags__contains=a,b,c

Вышеупомянутый фильтр проверяет входные данные, разделенные запятыми, и возвращает список очищенных значений, который подходит для базового вызова .filter() .

С другой стороны, немного сложнее обрабатывать преобразования индекса и среза, которые неструктурированы и имеют теоретически бесконечное количество комбинаций.

Спасибо за информацию.

На данный момент я собираюсь закрыть это как Вне области действия. Мы рады рассмотреть задокументированные, проверенные запросы на вытягивание. Возможно, в будущем мы сможем пересмотреть свое мнение.

Обновлять:
Параметр name был переименован в field_name поэтому MyFilterSet должен выглядеть так:

class MyFilterSet(filters.FilterSet):
    tags__contains = CharArrayFilter(field_name='tags', lookup_expr='contains')

    class Meta:
        model = SomethingTaggable
Была ли эта страница полезной?
0 / 5 - 0 рейтинги