“ 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)
答案 0 :(得分:1)
用下面的代码替换您的代码。
class Comment(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
post = models.ForeignKey(Post, on_delete=models.CASCADE, null=True)
替换代码后,进行迁移,然后重试
答案 1 :(得分:0)
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',)