Как фильтровать по 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(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:

views.py

from django_filters import rest_framework as filters

...
filter_backends = (filters.DjangoFilterBackend,)
filterset_fields = ['param__parameterName']

Вы можете использовать filterset_fields = ['param__parameterName'] для фильтрации по params имени робота

Например, url/?param__parameterName='sth' будет фильтровать роботов, у которых есть параметр с именем 'sth'

Вернуться на верх