Django Rest Framework - CreateAPIView 外键查找字段

How*_*ott 6 python django django-models django-rest-framework

我正在使用 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)
Run Code Online (Sandbox Code Playgroud)

串行器

class CommentCreateSerializer(ModelSerializer):

    class Meta:
        model = Comments
        fields = [
            'content',
            'post'
        ]
Run Code Online (Sandbox Code Playgroud)

并查看

class CommentCreateView(CreateAPIView):
    permission_classes = [IsAuthenticated]
    queryset = Comments.objects.all()
    serializer_class = CommentCreateSerializer


Run Code Online (Sandbox Code Playgroud)

我向创建路线发送了一个帖子请求,post(ID)并且content一切正常。但问题是我想传递帖子slug而不是帖子 ID。

我不知道我该怎么做。我熟悉lookup_fields,但我不确定如何将它们应用于外键匹配。

rud*_*dra 5

当您在 Comment Create 请求上传递值时,可以使用SlugRelatedFieldCommentCreateSerializer使用slug而不是pkpost,如下所示:

class CommentCreateSerializer(ModelSerializer):
    post = serializers.SlugRelatedField(
        queryset=Posts.objects.all(), slug_field='slug'
    )

    class Meta:
        model = Comments
        fields = [
            'content',
            'post'
        ]
Run Code Online (Sandbox Code Playgroud)