如何在 DRF 中提供可选参数
How To give optional parameter in DRF
大家好,我创建了一个 api,我将使用 [city] 作为第一个参数来获取基于城市的结果,但我还需要 [id] 作为第二个参数,但 [id] 是可选的,同时我们使用 [id] 作为第二个参数,有时不使用,请帮帮我
前任
1-根据城市获取数据
url=127.0.0.1:8000/api/car/city
2-根据city和id获取数据
url=127.0.0.1:8000/api/car/city/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(...)
用于通过 primary-key 获取单个 Car
对象。
例如 gms/car_list/1
将 return id 为 1 的 Car
对象。
现在您已经用城市 ID 替换了汽车的 ID。
我会用 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
进行过滤。
大家好,我创建了一个 api,我将使用 [city] 作为第一个参数来获取基于城市的结果,但我还需要 [id] 作为第二个参数,但 [id] 是可选的,同时我们使用 [id] 作为第二个参数,有时不使用,请帮帮我
前任
1-根据城市获取数据
url=127.0.0.1:8000/api/car/city
2-根据city和id获取数据
url=127.0.0.1:8000/api/car/city/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(...)
用于通过 primary-key 获取单个 Car
对象。
例如 gms/car_list/1
将 return id 为 1 的 Car
对象。
现在您已经用城市 ID 替换了汽车的 ID。
我会用 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
进行过滤。