drf - 如何在子序列化器中访问父序列化器的字段

drf - how to access field of parent serializer in child serializer

我有 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