Drf - как получить доступ к полю родительского сериализатора в дочернем сериализаторе

У меня есть 3 модели
models.py

class First(models.Model):
is_available = models.BooleanField(default=False)

class Second(models.Model):
some_field = models.BooleanField(default=False)

class Third(models.Model):
first = models.ForeignKey(First, null=True, blank=True, on_delete=models.CASCADE)
second = models.ForeignKey(Second, null=True, blank=True, on_delete=models.CASCADE)

serializers.py

class SecondSerializer(serializers.Serializer):
    some_field = serializers.BooleanField()
    is_available = serializers.BooleanField() # field from models.First



class ThirdSerializer(serializers.Serializer):
    second = SecondSerializer()

views.py

class ThirdViewSet(mixins.ListModelMixin, GenericViewSet):
    .........
    def get_queryset(self):
        return Third.objects.select_related('first', 'second')

Мне нужно отправить ответ через ThirdSerializer, но First.is_available должен быть отправлен во SecondSerializer. Как я могу этого добиться?

Вы можете попробовать добавить свойство is_available во второй объект и передать его сериализатору.

class SecondSerializer(serializers.Serializer):
    some_field = serializers.BooleanField()
    is_available = serializers.BooleanField()

class ThirdSerializer(serializers.Serializer):
    second = serializers.SerializerMethodField()

    def get_second(self, obj):
        second = obj.second
        second.is_available = obj.first.is_available
        return SecondSerializer(instance=second).data
Вернуться на верх