Django Rest Framework 对 post api 的评论

我正在使用 drf 开发休息 api,我正在尝试在帖子详细信息 api 上显示评论。我查看了嵌套的序列化程序,但无法在我的项目中实施。如何使用嵌套序列化程序来显示评论?我得到了这个错误:


NameError: name 'CommentSerializer' is not defined

有我的代码:


-评论模型


class Comment(models.Model):

    post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments')

    author = models.ForeignKey(CustomUser, on_delete=models.CASCADE)

    content = models.TextField(max_length=255)

    created_at = models.DateTimeField(auto_now_add=True)

    parent = models.ForeignKey('self', null=True, blank=True, on_delete=models.CASCADE)

    is_active = models.BooleanField(default=True)


    class Meta:

        ordering = ('-created_at',)


    def __str__(self):

        retun f'Comment by {self.author.username} on {self.post}'


    def children(self):

        return Comment.objects.filter(parent=self)


    @property

    def is_parent(self):

        if self.parent is not None:

            return False

        return True

-岗位模型


class Post(models.Model):

    author = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)

    image = models.ImageField(upload_to=upload_location,blank=True, null=True)

    title = models.TextField(max_length=30, null=True, blank=True)

    slug = models.SlugField(unique=True, blank=True)

    created_at = models.DateTimeField(default=timezone.now)

    star_rate = models.FloatField(default=0.0)


    def __str__(self):

        return self.slug


    def get_absolute_url(self):

        return reverse('post-detail', kwargs={'slug':self.slug})

-serializers.py


class PostDetailSerializer(serializers.ModelSerializer):

    image = SerializerMethodField()

    author = SerializerMethodField()

    comments = CommentSerializer(source='comments.content')

    class Meta:

        model = Post

        fields = ('author', 'image', 'title', 'created_at','star_rate', 'slug', 'comments')


    def get_image(self, obj):

        try:

            image = obj.image.url

        except:

            image = None

        return image


    def get_author(self, obj):

        return obj.author.username



侃侃无极
浏览 159回答 1
1回答

慕丝7291255

你的代码是颠倒的。被引用的实体在被引用之前需要被定义。将 CommentSerializer 类放在 PostDetailSerializer 类之前。class CommentSerializer(serializers.ModelSerializer):    reply_count = SerializerMethodField()    author = SerializerMethodField()    class Meta:        model = Comment        fields = ('content', 'parent', 'author', 'reply_count', 'post')    def get_reply_count(self, obj):        if obj.is_parent:            return obj.children().count()        return 0    def get_author(self, obj):        return obj.author.usernameclass PostDetailSerializer(serializers.ModelSerializer):    image = SerializerMethodField()    author = SerializerMethodField()    comments = CommentSerializer(source='comments.content')    class Meta:        model = Post        fields = ('author', 'image', 'title', 'created_at','star_rate', 'slug', 'comments')    def get_image(self, obj):        try:            image = obj.image.url        except:            image = None        return image    def get_author(self, obj):        return obj.author.username
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python