Django REST Framework 中的模型序列化程序通过允许发布 ID 整数来处理外键关系出于分配目的。然而,将此行为扩展到嵌套序列化器会带来挑战,尤其是在仅分配现有数据库对象时。
在缺乏开箱即用的支持的情况下,可以重写父序列化器中的 to_representation() 以包含嵌套的子数据:
class ParentSerializer(ModelSerializer): def to_representation(self, instance): response = super().to_representation(instance) response['child'] = ChildSerializer(instance.child).data return response
这种方法提供了一个简单有效的解决方案用于创建和读取具有嵌套子级的父实例。
对于更通用的处理,可以使用自定义序列化器字段:
class RelatedFieldAlternative(serializers.PrimaryKeyRelatedField): def __init__(self, **kwargs): ... def use_pk_only_optimization(self): ... def to_representation(self, instance): ...
通过定义此父序列化器中的字段并将序列化器设置为子序列化器类,可以使用单个来实现外键分配key:
class ParentSerializer(ModelSerializer): child = RelatedFieldAlternative(queryset=Child.objects.all(), serializer=ChildSerializer)
这种通用方法的优点在于它适用于需要这种行为的多个序列化器,减少了每个序列化器对自定义字段和方法的需求。
以上是如何在 Django REST Framework 中分配嵌套外键:一种简化方法的详细内容。更多信息请关注PHP中文网其他相关文章!