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
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
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 denMeta.fields
Dokumenten, der das etwas andere Verhalten vonexact
Suchvorgängen erklärt.