为了账号安全,请及时绑定邮箱和手机立即绑定

Django Rest Framework 对 post api 的评论

Django Rest Framework 对 post api 的评论

侃侃无极 2023-03-01 14:43:33
我正在使用 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.pyclass 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
查看完整描述

1 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

你的代码是颠倒的。被引用的实体在被引用之前需要被定义。将 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.username


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


查看完整回答
反对 回复 2023-03-01
  • 1 回答
  • 0 关注
  • 158 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号