我正在写一个CommentSerializer
,因为它的一个字段是originalPost
。 Post
已经写了PostSerializer
。在模型中,Comment
继承了Post
,但仅有originalPost
作为附加字段。两者的代码如下:
class PostSerializer(serializers.ModelSerializer):
poster = UserSerializer()
community = CommunitySerializer()
class Meta:
model = Post
fields = ['post','community','poster','id']
def create(self,validated_data):
userData = validated_data.pop('poster')
user = User.objects.get_or_create(username=userData['username'],email=userData['email'],first_name=userData['first_name'],last_name=userData['last_name'],password=userData['password'])[0]
validated_data['poster'] = user
communityData = validated_data.pop('community')
community = Community.objects.get_or_create(name=communityData['name'])[0]
validated_data['community'] = community
post = Post.objects.create(**validated_data)
return post
class CommentSerializer(serializers.ModelSerializer):
poster = UserSerializer()
community = CommunitySerializer()
originalPost = PostSerializer()
class Meta:
model = Comment
fields = ['post','originalPost']
def create(self,password=userData['password'])[0]
validated_data['poster'] = user
communityData = validated_data.pop('community')
community = Community.objects.get_or_create(name=communityData['name'])[0]
validated_data['community'] = community
originalPostData = validated_data.pop('originalPost')
originalPost = Post.objects.get_or_create(id = originalPostData['id'])[0]
validated_data['originalPost'] = originalPost
comment = Comment.objects.create(**validated_data)
return comment
我的问题是我将以下comment1
通过了我的createComment
测试:
self.postWithId = {'post': 'post text','community': self.community1,'poster': self.user1,'id': 1}
self.comment1 = {'post': 'comment text','originalPost': self.postWithId}
很明显,我的评论的originalPost
字段应该有一个id
字段,但是当到达此行时
originalPost = Post.objects.get_or_create(id = originalPostData['id'])[0]
在CommentSerializer中出现键错误,因为似乎id
字段已从validated_data
输入中完全删除。
我一直看到很多相关的帖子说要制作id
read_only=False
(Django REST Framework nested resource key "id" unaccessible,然后需要我手动设置一个id
,我这样做对此,我可以采用默认的AutoField
行为。