亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號