Как указать необязательный параметр в 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.

  1. Установите django-filter (проверьте документацию).
  2. Замените на:
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.
  1. Теперь вы можете отправить запрос на /gms/car_list?city=4&id=1 для фильтрации по id и city.
Вернуться на верх