Django-filter: Enthält/Icontains-Filter funktioniert nicht

Erstellt am 16. Jan. 2017  ·  4Kommentare  ·  Quelle: 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)

Clientfilter wird grundsätzlich ignoriert. Wenn ich icontains durch exakt ersetze, funktioniert es.
Aber ich kann keine Contains oder Icontains bekommen, um an irgendwelchen Feldern zu arbeiten.

Anforderungen.txt:

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

Hilfreichster Kommentar

Hallo @xtinch - könnten Sie eine Beispiel-URL mit Abfrageparametern posten? Ich vermute, dass Sie /api/orders?status=foo anstelle von /api/orders?status__icontains=foo abfragen. Es gibt einen Hinweis in den Meta.fields Dokumenten, der das etwas andere Verhalten von exact Suchvorgängen erklärt.

Alle 4 Kommentare

Hallo @xtrich.

Aus der Beschreibung kann ich kein Problem erkennen. Kann ich raten, dass Sie versuchen, einen Haltepunkt in die FilterSet -Eigenschaft von qs und durchzugehen, um zu sehen, was passiert.

Wenn Sie es auf einen einfachen Testfall eingrenzen könnten, würde auch das helfen.

Filter nimmt einfach den Wert und erstellt eine Suche nach dem ORM, sodass die Frage lautet: _Wo läuft das schief?_

Hallo @xtinch - könnten Sie eine Beispiel-URL mit Abfrageparametern posten? Ich vermute, dass Sie /api/orders?status=foo anstelle von /api/orders?status__icontains=foo abfragen. Es gibt einen Hinweis in den Meta.fields Dokumenten, der das etwas andere Verhalten von exact Suchvorgängen erklärt.

@rpkilby Danke. Ich hatte den Eindruck, dass das erste Element im Array der Standardfilter wird - ich sehe, dass ich mich geirrt habe :)

dein Beitrag ist sehr nützlich für mich in meinem Projekt
Vielen Dank

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen