Joseph Adam
Joseph Adam

Reputation: 1642

pass multiple fields to django rest framework api

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

Answers (1)

anjaneyulubatta505
anjaneyulubatta505

Reputation: 11665

You can pass all params like below

http://127.0.0.1:8000/api/?name=Toyoto&speed=90&age=55

using python "requests" package

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())

for search like "icontains" you can use filterset_class like below

from 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

Related Questions