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