django - 将多个字段传递给 django rest framework api
问题描述
我的模型
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
我的 api 序列化器
class carSerializer(serializers.ModelSerializer):
class Meta:
model = car
fields = ('name', 'speed', 'age')
我的列表视图
class carListView(ListAPIView):
queryset = car.objects.all()
serializer_class = carSerializer
filter_backends = (DjangoFilterBackend,)
filter_fields = ('name', 'speed', 'age')
如何通过 api 链接搜索name
模型字段speed
?age
目前,我可以使用搜索单个字段
http://127.0.0.1:8000/api/?name=Toyoto
如何修改上述链接以搜索多个字段?如何修改上述链接以搜索部分字母而不是精确?
解决方案
你可以params
像下面一样通过
http://127.0.0.1:8000/api/?name=Toyoto&speed=90&age=55
使用python“请求”包
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())
对于像“icontains”这样的搜索,你可以filterset_class
像下面这样使用
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
推荐阅读
- php - SQL select where conditions 2 if condition 1 不匹配
- javascript - 想要使用 Sheet Js 添加缺失的单元格
- sql - 如何从 Presto 中的 JSON 中提取值?
- java - 如何使用 RichTextFX 更改 JavaFX 中显示的选项卡宽度?
- twilio - 如何在 Twilio WhatsApp 中发送带有文件名的 PDF 文件?
- c# - Unity3D firebase AUTH 不适用于 ANDROID
- java - 如何从外部 .class 文件中获取所有测试方法的名称
- java - 如何从查询中获得结果?(Java、SQL)
- flutter - “IconData”类型不是“Widget”类型的子类型
- operating-system - 访问 ChromeOS 上的系统级功能