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)
Básicamente, se ignora el filtro de cliente. Si reemplazo icontains con exact, funciona.
Pero no puedo hacer que los contenidos o icontains funcionen en ningún campo.
Requirements.txt:
Django == 1.10.4
psycopg2 == 2.6.2
djangorestframework == 3.5.3
canales == 1.0.0
djangorestframework-jwt == 1.9.0
filtro django == 1.0.1
asgi-redis == 1.0.0
daphne == 1.0.0
Hola @xtrinch.
En la descripción, no veo ningún problema. ¿Puedo aconsejarle que trate de poner un punto de interrupción en el FilterSet
's qs
propiedad y paso a través de ver lo que está pasando.
Si pudiera reducirlo a un caso de prueba simple, eso también ayudaría.
Filter
solo toma el valor y crea una búsqueda para el ORM, por lo que la pregunta es, _¿Dónde va mal? _
Hola @xtrinch , ¿podrías publicar una URL de muestra con parámetros de consulta? Supongo que estás consultando /api/orders?status=foo
lugar de /api/orders?status__icontains=foo
. Hay una nota en los documentos de Meta.fields
que explica el comportamiento ligeramente diferente de las búsquedas de exact
.
@rpkilby Gracias. Tenía la impresión de que el primer elemento de la matriz se convierte en el filtro predeterminado; veo que estaba equivocado :)
tu publicación me es muy útil en mi proyecto
Gracias
Comentario más útil
Hola @xtrinch , ¿podrías publicar una URL de muestra con parámetros de consulta? Supongo que estás consultando
/api/orders?status=foo
lugar de/api/orders?status__icontains=foo
. Hay una nota en los documentos deMeta.fields
que explica el comportamiento ligeramente diferente de las búsquedas deexact
.