如何在 DRF 中使用带有 ArrayField 的 django filter_fields

How to use django filter_fields with ArrayField in DRF

我在模型中使用 Postgres ArrayField。我正在尝试使用 Django 过滤器,但出现错误。

AutoFilterSet 已解析字段 'flavor' 'exact' 查找无法识别的字段类型 ArrayField。尝试向 'Meta.filter_overrides' 添加覆盖。参见:https://django-filter.readthedocs.io/en/master/ref/filterset.html#customise-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)

视图集

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

好吧,我想通了,哈哈。需要使用 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

别忘了

import django_filters as filters

因为您没有使用原来的名字。我还必须将字段更改为方括号。

fields = ['item', 'category']