Django REST Framework 中的嵌套序列化器的外键分配
Django REST Framework (DRF) 提供了一种管理外键关系的便捷方法序列化数据。然而,在嵌套序列化器中获得所需的行为可能具有挑战性。
嵌套序列化器中的外键分配
嵌套序列化器继承其父序列化器的行为。默认情况下,它们不允许直接分配或修改外键。为了克服这个问题,一种常见的方法是为外键 ID 指定一个附加字段。然而,这可能会导致前端开发不明确。
替代解决方案
1.自定义 to_representation() 方法:
一种解决方案是重写父序列化器的 to_representation() 方法。这允许在序列化响应中包含自定义数据。
def to_representation(self, instance): response = super().to_representation(instance) response['child'] = ChildSerializer(instance.child).data return response
此方法确保外键表示为嵌套序列化器对象,从而可以使用相同的键进行创建和读取。
2。 relatedFieldAlternative 字段:
更通用的解决方案是创建一个行为与默认 PrimaryKeyRelatedField 不同的自定义序列化器字段。
class RelatedFieldAlternative(serializers.PrimaryKeyRelatedField): def to_representation(self, instance): if self.serializer: return self.serializer(instance, context=self.context).data return super().to_representation(instance)
此字段允许为外键的表示指定序列化器。
使用相关字段替代字段
RelatedFieldAlternative 字段可以在父序列化器中使用,如下所示:
class ParentSerializer(ModelSerializer): child = RelatedFieldAlternative(queryset=Child.objects.all(), serializer=ChildSerializer)
使用自定义字段的好处
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3