Django Rest框架-为关系嵌套序列化程序编写
我是一个新的DRF,所以我事先为任何错误感到抱歉 例如,我有一个Post模型,它将Author作为NewUser模型的外键。当我列出文章时,我不想得到author的主键,而是想得到带有author详细信息的嵌套对象,这就是为什么我创建了这样的序列化程序Django Rest框架-为关系嵌套序列化程序编写,django,rest,serialization,django-rest-framework,Django,Rest,Serialization,Django Rest Framework,我是一个新的DRF,所以我事先为任何错误感到抱歉 例如,我有一个Post模型,它将Author作为NewUser模型的外键。当我列出文章时,我不想得到author的主键,而是想得到带有author详细信息的嵌套对象,这就是为什么我创建了这样的序列化程序 class PostAuthorSerializer(serializers.ModelSerializer): class Meta: model = NewUser fields = ["id
class PostAuthorSerializer(serializers.ModelSerializer):
class Meta:
model = NewUser
fields = ["id", "email", "user_name"]
class PostSerializer(serializers.ModelSerializer):
author = PostAuthorSerializer()
class Meta:
model = Post
read_only_fields = ("slug",)
fields = (
"id",
"title",
"author",
"excerpt",
"content",
"status",
"slug",
)
lookup_field = "slug"
然而,现在我不知道如何回复帖子。我搜索了2天,但找不到一个合适的指南来了解如何做。我的主要目标是学习/理解而不是解决这个问题,所以一点解释也不错!我真的很想学习DRF,但我认为它缺乏详细的文档和互联网上的例子,或者至少我找不到我问题的答案
因此,我想学习两种发帖方式:
提前谢谢 将author字段设置为
author=PostAuthorSerializer()
时,它不再是与主键相关的字段。为了实现您正试图做的事情,您需要使用单独的定义(例如,不同的序列化程序)进行读写
但我建议这样的解决方法:
class PostAuthorSerializer(serializers.ModelSerializer):
类元:
model=NewUser
字段=[“id”、“电子邮件”、“用户名”]
类后序列化程序(serializers.ModelSerializer):
author\u data=serializers.SerializerMethodField()
类元:
型号=员额
只读字段=(“slug”,)
字段=(
“身份证”,
“头衔”,
“作者”,
“作者数据”,
“摘录”,
“内容”,
“地位”,
“鼻涕虫”,
)
查找\u field=“slug”
def获取作者数据(自身、obj):
返回PostAuthorSerializer(实例=obj.author).data
然后,您将能够使用ID编写
author
,并且序列化的作者数据将作为响应中的author\u data
提供。当您将author字段设置为author=PostAuthorSerializer()
时,它不再是主键相关字段。为了实现您正试图做的事情,您需要使用单独的定义(例如,不同的序列化程序)进行读写
但我建议这样的解决方法:
class PostAuthorSerializer(serializers.ModelSerializer):
类元:
model=NewUser
字段=[“id”、“电子邮件”、“用户名”]
类后序列化程序(serializers.ModelSerializer):
author\u data=serializers.SerializerMethodField()
类元:
型号=员额
只读字段=(“slug”,)
字段=(
“身份证”,
“头衔”,
“作者”,
“作者数据”,
“摘录”,
“内容”,
“地位”,
“鼻涕虫”,
)
查找\u field=“slug”
def获取作者数据(自身、obj):
返回PostAuthorSerializer(实例=obj.author).data
然后您将能够使用ID编写author
,并且序列化的author数据将作为author\u data
在响应中可用