我正在使用Django Rest Framework CreateAPIView来创建注释。到目前为止,一切正常,这是我的代码。
模型
class Posts(models.Model):
title = models.CharField(max_length=512, null=True)
slug = models.CharField(max_length=512, null=True)
class Comments(models.Model):
post = models.ForeignKey(Posts, on_delete=models.CASCADE)
content = models.CharField(max_length=5000, null=True)
序列化器
class CommentCreateSerializer(ModelSerializer):
class Meta:
model = Comments
fields = [
'content',
'post'
]
并查看
class CommentCreateView(CreateAPIView):
permission_classes = [IsAuthenticated]
queryset = Comments.objects.all()
serializer_class = CommentCreateSerializer
我使用post(ID)
和content
向创建路由发送了发布请求,一切正常。但是问题是我想传递帖子slug
而不是帖子ID。
我不确定该怎么做。我对lookup_fields很熟悉,但是我不确定如何将它们应用于ForeignKey匹配。
答案 0 :(得分:2)
当您在评论创建中传递CommentCreateSerializer
值时,可以使用post
中的SlugRelatedField来使用 slug 而不是 pk 请求,例如:
class CommentCreateSerializer(ModelSerializer):
post = serializers.SlugRelatedField(
queryset=Posts.objects.all(), slug_field='slug'
)
class Meta:
model = Comments
fields = [
'content',
'post'
]
答案 1 :(得分:1)
在CommentAPI视图中,您需要像这样将perform create方法覆盖到查找中
def perform_create(self):
post_pk = self.kwargs.get("post_pk")
post = get_object_or_404(Post, pk=post_pk)
serializer.save(post=post)