我想使用一个序列化程序来创建注释并获取它们的列表。
这是我的评论序列化器:
class CommentSerializer(serializers.ModelSerializer):
creator = UserBaseSerializer(source='author')
replies = ShortCommentSerializer(many=True, read_only=True)
reply_on = serializers.PrimaryKeyRelatedField(
queryset=Comment.objects.all(),
write_only=True,
allow_null=True,
required=False
)
author = serializers.PrimaryKeyRelatedField(
queryset=get_user_model().objects.all(),
write_only=True
)
class Meta:
model = Comment
fields = ('id', 'text', 'object_id', 'creator', 'replies', 'reply_on',
'author')
extra_kwargs = {
'text': {'required': True},
'object_id': {'read_only': True}
}
def create(self, validated_data):
validated_data.update(
{'content_type': self.context['content_type'],
'object_id': self.context['pk']}
)
return Comment.objects.create(**validated_data)
我的Comment
模型具有字段author
,这是FK到用户模型。在GET方法中,我将creator
作为NestedSerializer返回source='author'
。我也得到author
字段,仅用于写目的。我试图弄清楚是否可以同时使用author
字段进行读写。
答案 0 :(得分:0)
听起来您想要Writable Nested Serializer。拥有已定义的create
可以使您步入正轨,但是希望链接的文档应该为如何实现此目标提供一个好主意。您可以避免不必遍历可写字段,因为它不是many
关系。
答案 1 :(得分:0)
您可以尝试像这样重写方法get_serializer_class:
def get_serializer_class(self):
if self.request.method == 'POST':
return CommentCreateSerializer
return CommentSerializer
在CommentCreateSerializer中,您可以直接编写author
字段。而带有source='author'
的CommentSerializer仅用于api获取。
获取此帮助