Как указать необязательный параметр в DRF
Всем привет, я создал один api, где в качестве параметра будет city_id, но мне нужен параметр id для этого api, то есть просмотр данных на основе city_id или на основе id, пожалуйста, помогите мне.
serializers.py
class CarNumberSerializer(serializers.ModelSerializer):
model=CarModelNameSerializer()
company=CarCompanySerializer()
class Meta:
model = Car
fields = ['id','car_number','model','company']
views.py
class CarNumberViewset(viewsets.ModelViewSet):
queryset=Car.objects.all()
serializer_class= CarNumberSerializer
def retrieve(self, request, *args, **kwargs):
params= kwargs
params_list=params['pk']
car=Car.objects.filter(city=params_list)
serializer=CarNumberSerializer(car,many=True)
return Response(serializer.data)
urls.py
routers.register(r'gms/car_list',CarNumberViewset)
def retreive(...) предназначен для получения одного объекта Car по первичному ключу.
Например, gms/car_list/1 вернет объект Car с идентификатором 1.
Сейчас вы заменили идентификатор автомобиля на идентификатор города.
Я бы использовал метод list вместо этого с django-filter.
- Установите django-filter (проверьте документацию).
- Замените на:
class CarNumberViewset(viewsets.ModelViewSet):
queryset = Car.objects.all()
serializer_class = CarNumberSerializer
filterset_fields = ('city', 'id')
# No need to overwrite list() or retrieve() here. DRF handles everything.
- Теперь вы можете отправить запрос на
/gms/car_list?city=4&id=1для фильтрации поidиcity.