Wie wendet man ein Filter-Backend auf alle Felder aller Ressourcen in Django Rest Framework an?

8

Ich habe viele Ressourcen und möchte das DjangoFilterBackend auf alle anwenden.

Erprobte Einstellung in settings.py

%Vor%

Aber es hat nicht funktioniert

Ich habe versucht, nur filter_backends = (filters.DjangoFilterBackend,) zu einer meiner Ressourcen hinzuzufügen, und es hat immer noch nicht funktioniert.

Erst nachdem ich filter_fields = ('col1','col2',) explizit hinzugefügt habe, begann es nur mit diesen Feldern zu arbeiten.

Gibt es eine Möglichkeit, das Filter-Backend auf alle Ressourcen und alle Felder anzuwenden (so wie ich es beispielsweise mit Berechtigungen mache ...)?

Danke.

    
haki 30.11.2014, 16:33
quelle

1 Antwort

10

Im Moment sagen Sie Django REST Framework, dass Sie DjangoFilterBackend für alle Ansichten verwenden sollen, aber Sie sagen nicht, wie die FilterSet generiert werden soll.

django-filter wird automatisch ein FilterSet für alle Felder auf einem Modell erzeugen, wenn die fields werden auf None gesetzt. Django REST-Framework wird automatisch ein FilterSet generiert, wenn filter_fields nicht Setzen Sie den Wert auf None , was bedeutet, dass Sie nicht den Standard DjangoFilterBackend verwenden können.

Sie können jedoch eine benutzerdefinierte DjangoFilterBackend erstellen, die automatisch die FilterSet für alle Felder im Modell generiert.

%Vor%

Dies wird immer noch das ursprüngliche Filter-Backend für Situationen verwenden, in denen die Ansicht ein benutzerdefiniertes filter_class oder filter_fields definiert, aber es generiert ein benutzerdefiniertes FilterSet für alle anderen Situationen. Beachten Sie, dass Felder, die nicht über die API zurückgegeben werden, nicht gefiltert werden dürfen, da Sie sich für zukünftige Sicherheitsprobleme öffnen (z. B. wenn Benutzer eine Benutzerliste nach Passwörtern filtern).

    
Kevin Brown 30.11.2014, 23:25
quelle

Tags und Links