“post\u id”列不能为空

2024-09-26 18:09:59 发布

您现在位置:Python中文网/ 问答频道 /正文

“post\u id”列不能为空

我不知道为什么我不能带来post\u id。如果你试图添加评论,你可能无法带来post\u id。我无法解决它。请帮帮我。你知道吗

你知道吗型号.py你知道吗


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

你知道吗序列化程序.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',)

你知道吗视图.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)




Tags: pyidonlyreadonmodelscommentdelete
2条回答

评论模型与Post模型之间存在着外键关系。因此,如果创建新注释,则必须设置Post(Post\ id)的值。您可以在序列化程序中或在视图集中的perform\u 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',)

用下面的代码替换您的代码。你知道吗

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

替换代码后,请执行迁移并重试

相关问题 更多 >

    热门问题