【问题标题】:how to make api for comments on a blog detail view. I dont need replies to comments ( ie no children comment)如何为博客详细视图上的评论制作 api。我不需要回复评论(即没有儿童评论)
【发布时间】:2021-02-01 05:11:05
【问题描述】:

我想显示博客文章详细信息的 cmets。我是 Django 的新手。我必须为此制作一个api。这是我所拥有的。

class BlogPost(models.Model):
    CATEGORY_CHOICES = (
        ('travel_news', 'Travel News',),
        ('travel_tips', 'Travel Tips',),
        ('things_to_do', 'Things to Do',),
        ('places_to_go', 'Places to Go'),
    )
    image = models.ImageField(blank=True, null=True)
    categories = models.CharField(max_length=64, choices=CATEGORY_CHOICES, default='travel_news')
    description = models.CharField(max_length=255)
    content = RichTextUploadingField()
    
    # todo support for tags
    tags = models.CharField(max_length=255, default='#travel') #todo
    date_created = models.DateField()

    @property
    def html_stripped(self):
       from django.utils.html import strip_tags
       return strip_tags(self.content)

  
class Comment(models.Model):
    blog = models.ForeignKey(BlogPost, on_delete=models.CASCADE, default=1)
    name = models.CharField(max_length=255)
    email = models.EmailField()
    subject = models.CharField(max_length=255)
    comment = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    is_active = models.BooleanField(default=True)

    class Meta:
        ordering = ('created_at',)

这是我的序列化器

class CommentSerializer(serializers.ModelSerializer):
    blog = serializers.StringRelatedField()
    class Meta:
        model = Comment
        fields = '__all__'


 
class BlogPostSerializer(serializers.ModelSerializer):
  
    comments = CommentSerializer(source='comments.content')
    class Meta:
        model = BlogPost
        fields = ['image', 'categories', 'description', 'content', 'tags', 'date_created', 'comments']
        # fields = '__all__'

这是我的看法。

class BlogPostDetailsListAPIView(ListAPIView):
       
        serializer_class = BlogPostSerializer

        def get_queryset(self):
            return BlogPost.objects.filter(pk=self.kwargs['pk'])

这里我的视图只返回 BLogpost 对象,而不是 cmets。如何返回 cmets 以及帖子详细信息视图?我们可以不用 contenttype 吗?

【问题讨论】:

    标签: python django api model comments


    【解决方案1】:

    我最近在做这个。在您的 BlogSerializer 中,您可以从 CommentSerializer(source='comments.content') 更改为 CommentSerializer(many=True, read_only=True)

    我是 Restframework 的新手,所以不太了解它是怎么做的。

    【讨论】:

    • 但是,我只返回了我认为的 Blogpost 对象。我怎样才能返回 cmets 对象呢??
    • 你是不是像上面那样改了,你得到了什么?在我的例子中,我得到了一个评论对象数组作为 blogpost 对象的属性
    猜你喜欢
    • 2021-03-04
    • 1970-01-01
    • 2020-10-02
    • 2021-04-16
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    相关资源
    最近更新 更多