【发布时间】:2018-09-10 20:52:42
【问题描述】:
我想使用一个序列化程序来创建 cmets 并获取它们的列表。
这是我的评论序列化器:
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,它是用户模型的外键。在 GET 方法中,我将 creator 作为带有 source='author' 的 NestedSerializer 返回。我还得到了author 字段,仅用于写入目的。我试图弄清楚是否可以使用author 字段进行读写。
【问题讨论】:
-
在我看来,作者应该是当前登录的用户,你不必(实际上,你不应该)从前端获取它的值,你可以将它分配给您的视图或序列化程序,因此您可以将名称作者留作只读使用(UserBaseSerializer)。看看我对另一个问题的回答,也许会给你一些想法:stackoverflow.com/a/51942497/6177831
-
@changak 谢谢,它帮助了我!
标签: django django-rest-framework