列“ post_id”不能为空

“ post_id”列不能为空

我不知道为什么我不能携带post_id。如果您尝试添加评论,则可能无法携带post_id。我解决不了请帮助我。

models.py


class Comment(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE)
    post = models.ForeignKey(Post,on_delete=models.CASCADE)

serializers.py


class CommentSerializer(serializers.ModelSerializer):
    user = UserSerializer(read_only=True)
    post = PostSerializer(read_only=True)

    class Meta:
        model = Comment
        fields = (
            'user','post','id','content',)
        read_only_fields = ('created_at',)

views.py

# api/views.py


class CommentView(viewsets.ModelViewSet):
    queryset = Comment.objects.all()
    serializer_class = CommentSerializer
    permission_classes = (permissions.IsAuthenticated,)
    def perform_create(self,serializer):
        serializer.save(user=self.request.user)



wohongming 回答:列“ post_id”不能为空

用下面的代码替换您的代码。

class Comment(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE,null=True)
    post = models.ForeignKey(Post,null=True)

替换代码后,进行迁移,然后重试

,

Comment模型与Post模型具有外键关系。因此,如果创建新注释,则必须设置Post(post_id)的值。您可以在序列化器中或在视图集中的perform_create方法中执行此操作。

在下面的示例中,我假设值为post id的字段的名称为post。而且我没有为要检索的帖子添加验证。

示例:

class CommentSerializer(serializers.ModelSerializer):
    user = UserSerializer(read_only=True)
    post = PostSerializer(read_only=True)

    def create(self,validated_data):
        instance = super().create(validated_data)
        instance.post = Post.objects.get(id=self.initial_data['post'])
        instance.save()

        return instance

    class Meta:
        model = Comment
        fields = (
        'user','post','id','content',)
        read_only_fields = ('created_at',)
本文链接:https://www.f2er.com/3151795.html

大家都在问