Ich versuche, grundlegende Filterung mit meiner URL zu tun. Ich habe mehrere Lösungen ohne Erfolg ausprobiert.Filterung mit URL mit DRF
Bitte schlagen Sie eine einfache Lösung vor. Sicherlich gibt es eine generische Lösung
Hier ist mein Code:
Models.py
class Tag(models.Model):
name = models.CharField("Name", max_length=5000, blank=True)
level = models.IntegerField("Level", null=True, blank=True)
Views.py
class TagFilterBackend(filters.BaseFilterBackend):
def filter_queryset(self, request, queryset, view):
return queryset.filter(owner=request.user)
Urls.py
router.register(r'tag', TagViewSet)
I möchte lik filtern können e dies:
xyz.com/tag?level=40/
Um alle Elemente mit einer Ebene von nur 40 anzuzeigen.
Mit Django-Filter (nicht zu verwechseln mit DjangoFilter S) habe ich eine neue filters.py-Datei erstellt.
Die Ergebnisse werden jedoch nie gefiltert. Wenn ich die API URL treffe, gibt es mir nur alle Ergebnisse.
Filter.py
from rest_framework import generics
from django_filters import rest_framework as filters
from Tril.models import Tag
from .serializers import TagSerializer
class TagFilter(filters.FilterSet):
min_price = filters.NumberFilter(level="level", lookup_expr='gte')
max_price = filters.NumberFilter(level="level", lookup_expr='lte')
class Meta:
model = Tag
fields = ['level', 'name']
class ProductList(generics.ListAPIView):
queryset = Tag.objects.all()
serializer_class = TagSerializer
filter_backends = (filters.DjangoFilterBackend,)
filter_class = TagFilter
Warum 'level = "Ebene"' in 'FilterSet' und was' taglevel' Feld ist, wenn der Feldname in der "Tag" -Modell ist stattdessen "level"? – AKS
Behoben, dass Up- war ein Einfügen Fehler – Ycon
Sie können auch über https://github.com/manjitkumar/drf-url-filters in Betracht ziehen –