Как фильтровать по URL сериализатор, когда он вложен в другой сериализатор в Django?
Я создаю 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(viewsets.ModelViewSet):
queryset = Robot.objects.all()
serializer_class = RobotSerializer
filter_backends = [filters.DjangoFilterBackend]
filterset_fields = ['robot', 'JenkinJobName__jenkinsBuildNumber']
authentication_classes = [BasicAuthentication]
permission_classes = [IsAuthenticated]
В URL API, если я хочу найти определенного робота, то используя этот URL URL/?robot=robotname я могу найти этого конкретного робота. Но как я могу искать конкретные вложенные данные с помощью URL?
Используя мое представление, я получаю фильтры поиска следующим образом
Но это не выполняет никакого поиска. как добиться такого поиска и что не так с моим кодом, может кто-нибудь помочь мне? На самом деле, когда я ищу вложенный сериализатор, только искомое значение должно присутствовать в списке, остальные должны исчезнуть.
Возможно, вам нужно переписать ваш метод list в вашем представлении, здесь это то, как на самом деле работает, вы можете добавить то, что вы хотите фильтровать или, возможно, вам нужно будет переписать ваш queryset в зависимости от параметров, которые вы хотите.