Reputation: 1642
My model
class car(models.Model):
name = models.CharField(max_length=255, unique=True)
speed = models.CharField(max_length=255)
age = models.CharField(max_length=255)
def __str__(self):
return self.name
My api serializer
class carSerializer(serializers.ModelSerializer):
class Meta:
model = car
fields = ('name', 'speed', 'age')
My list view
class carListView(ListAPIView):
queryset = car.objects.all()
serializer_class = carSerializer
filter_backends = (DjangoFilterBackend,)
filter_fields = ('name', 'speed', 'age')
How can I search the model fields name
, speed
, age
via the api link?
Currently, I am able to search a single field using
http://127.0.0.1:8000/api/?name=Toyoto
How can I modify the above link to search multiple fields ? How can I modify the above link to search partial letters rather than exact ?
Upvotes: 0
Views: 834
Reputation: 11665
You can pass all params
like below
http://127.0.0.1:8000/api/?name=Toyoto&speed=90&age=55
import requests
params = {'name': 'Toyoto', 'speed': '90', 'age': '95'}
url = 'http://127.0.0.1:8000/api/'
r = requests.get(url, params)
print(r.json())
filterset_class
like belowfrom django_filters import rest_framework as filters
from .models import car
class CarFilter(filters.FilterSet):
name = filters.CharFilter(field_name="name", lookup_expr='icontains')
speed = filters.CharFilter(field_name="speed", lookup_expr='icontains')
age = filters.CharFilter(field_name="age", lookup_expr='icontains')
class Meta:
model = car
fields = ('name', 'speed', 'age')
class carListView(ListAPIView):
queryset = car.objects.all()
serializer_class = carSerializer
filter_backends = (DjangoFilterBackend,)
filter_class = CarFilter
Upvotes: 1