Как использовать django filter_fields с ArrayField в DRF - PullRequest
2 голосов
/ 22 мая 2019

Я использую Postgres ArrayField в своих моделях. Я пытаюсь использовать фильтры django, но получаю сообщение об ошибке.

AutoFilterSet разрешил поле «flavor» с «точным» поиском для нераспознанного типа поля ArrayField. Попробуйте добавить переопределение в Meta.filter_overrides. См .: https://django -filter.readthedocs.io / en / master / ref / filterset.html # customize-filter-generation-with-filter-overrides

Модель

class Items(models.Model):
    item = models.CharField(max_length=150, unique=True)
    matches = ArrayField(models.CharField(
        max_length=200), blank=True, default=list)
    category = ArrayField(models.CharField(
        max_length=200), blank=True, default=list)
    flavor = ArrayField(models.CharField(
        max_length=200), blank=True, default=list)
    special = ArrayField(models.CharField(
        max_length=200), blank=True, default=list)
    created_at = models.DateTimeField(auto_now_add=True)

Viewset

class CategoryViewSet(viewsets.ModelViewSet):
    queryset = Items.objects.all()
    serializer_class = CategorySerializer
    filter_fields = ('item', 'category')

1 Ответ

1 голос
/ 22 мая 2019

Ну, я понял это, лол.Необходимо создать пользовательский фильтр с lookup_exp = 'icontains'.

class CategoryFilter(filters.FilterSet):
    category = filters.CharFilter(lookup_expr='icontains')

    class Meta:
        model = Items
        fields = ('item', 'category')
class CategoryViewSet(viewsets.ModelViewSet):
    queryset = Items.objects.all()
    serializer_class = CategorySerializer
    filterset_class = CategoryFilter
...