繁体   English   中英

将多个字段传递给Django Rest Framework API

[英]pass multiple fields to 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链接搜索模型字段的namespeedage

目前,我可以使用来搜索单个字段

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())

对于像“ contains”这样的搜索,可以使用如下的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM