我正在创建一个具有嵌套数据的 API,如图片中所示,请在此处输入图片描述
现在如何在 URL 中搜索嵌套数据,这是我的模型
class Robot(models.Model):
robot = models.CharField(max_length=100)
short_Description = models.CharField(max_length=200)
status = models.CharField(max_length=20)
parameter = models.CharField(max_length=200)
jenkins_job = models.CharField(max_length=100, default='JenkinsJobName')
jenkins_token = models.CharField(max_length=100, default='JenkinsToken')
def __str__(self):
return self.robot
class assignParameter(models.Model):
parameterName = models.CharField(max_length=100, blank=True)
assignRobot= models.ForeignKey(Robot, on_delete=models.CASCADE, related_name='param', blank=True, null=True)
这是我的 serializer.py
from .models import Robot,assignParameter
from rest_framework import serializers
class assignParameterSerializer(serializers.ModelSerializer):
class Meta:
model = assignParameter
fields = ['id', 'parameterName', 'assignRobot']
class RobotSerializer(serializers.ModelSerializer):
param = assignParameterSerializer(many=True, read_only=True)
JenkinJobName = jenkinsHistorySerializer(many=True, read_only=True)
class Meta:
model = Robot
fields = ['id', 'robot', 'short_Description', 'status', 'parameter', 'jenkins_job', 'jenkins_token', 'param']
这是我对 api 的看法
class RobotViewSet(mixins.ListModelMixin,GenericViewSet):
queryset = Robot.objects.all()
serializer_class = RobotSerializer
filter_backends = [DjangoFilterBackend]
filterset_fields = ['robot']
authentication_classes = [BasicAuthentication]
permission_classes = [IsAuthenticated]
在 api url 中,如果我想搜索特定的机器人,然后使用这个 url url/?robot=robotname我可以搜索那个特定的机器人。但是如何使用 URL 搜索特定的嵌套数据?
使用django-filter
:
视图.py
from django_filters import rest_framework as filters
...
filter_backends = (filters.DjangoFilterBackend,)
filterset_fields = ['param__parameterName']
您可以filterset_fields = ['param__parameterName']
用于过滤机器人的参数名称
例如 url/?param__parameterName='sth' 将过滤具有名称为 'sth' 的参数的机器人
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句