Django-filter: Contém / contém filtro que não funciona

Criado em 16 jan. 2017  ·  4Comentários  ·  Fonte: 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)

O filtro do cliente é basicamente ignorado. Se eu substituir icontains por exact, funciona.
Mas não consigo fazer conteúdo ou conteúdo para trabalhar em nenhum campo.

Requisitos.txt:

Django == 1.10.4
psycopg2 == 2.6.2
djangorestframework == 3.5.3
canais == 1.0.0
djangorestframework-jwt == 1.9.0
django-filter == 1.0.1
asgi-redis == 1.0.0
daphne == 1.0.0

Comentários muito úteis

Olá @xtrinch - você poderia postar um URL de amostra com parâmetros de consulta? Meu palpite é que você está consultando /api/orders?status=foo vez de /api/orders?status__icontains=foo . Há uma observação nos documentos Meta.fields que explica o comportamento ligeiramente diferente das pesquisas exact .

Todos 4 comentários

Olá, @xtrinch.

Pela descrição, não consigo ver o problema. Posso aconselhar que você tente colocar um ponto de interrupção em sua propriedade FilterSet qs e ver o que está acontecendo.

Se você pudesse restringi-lo a um caso de teste simples, isso também ajudaria.

Filter apenas pega o valor e constrói uma pesquisa para o ORM, então a pergunta é: _O que isso está dando errado? _

Olá @xtrinch - você poderia postar um URL de amostra com parâmetros de consulta? Meu palpite é que você está consultando /api/orders?status=foo vez de /api/orders?status__icontains=foo . Há uma observação nos documentos Meta.fields que explica o comportamento ligeiramente diferente das pesquisas exact .

@rpkilby Obrigado. Tive a impressão de que o primeiro item da matriz se tornaria o filtro padrão - vejo que estava errado :)

sua postagem é muito útil para mim no meu projeto
Obrigado

Esta página foi útil?
0 / 5 - 0 avaliações