Hi Everyone i am created one api, where i will use [city] as first parameter to get result based on city, but i need [id] also as second parameter but [id] is optional, same time we use [id] as second parameter and sometime not, please help me out
for ex-
1-get data based on city
url=127.0.0.1:8000/api/car/city
2-get data based on city and id
url= 127.0.0.1:8000/api/car/city/id
serializers.py
JavaScript
x
7
1
class CarNumberSerializer(serializers.ModelSerializer):
2
model=CarModelNameSerializer()
3
company=CarCompanySerializer()
4
class Meta:
5
model = Car
6
fields = ['id','car_number','model','company']
7
views.py
JavaScript
1
11
11
1
class CarNumberViewset(viewsets.ModelViewSet):
2
queryset=Car.objects.all()
3
serializer_class= CarNumberSerializer
4
5
def retrieve(self, request, *args, **kwargs):
6
params= kwargs
7
params_list=params['pk']
8
car=Car.objects.filter(city=params_list)
9
serializer=CarNumberSerializer(car,many=True)
10
return Response(serializer.data)
11
urls.py
JavaScript
1
2
1
routers.register(r'gms/car_list',CarNumberViewset)
2
Advertisement
Answer
def retreive(...)
is for getting a single Car
object by primary-key.
For example gms/car_list/1
will return the Car
object with id 1.
Right now you have replaced the car’s id with a city id.
I would use list
method instead with django-filter.
- Install django-filter (check docs).
- Replace with:
JavaScript
1
7
1
class CarNumberViewset(viewsets.ModelViewSet):
2
queryset = Car.objects.all()
3
serializer_class = CarNumberSerializer
4
filterset_fields = ('city', 'id')
5
6
# No need to overwrite list() or retrieve() here. DRF handles everything.
7
- Now you can send a request to
/gms/car_list?city=4&id=1
to filter byid
andcity
.