как создать api для комментариев в подробном представлении блога. Мне не нужны ответы на комментарии (т.Е. Без дочерних комментариев)

#python #django #api #model #comments

#python #django #API #Модель #Комментарии

Вопрос:

Я хочу показать комментарии к деталям сообщения в блоге. Я новичок в 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, но не комментарии.Как вернуть комментарии вместе с подробным представлением публикации? Можем ли мы обойтись без contenttype ?

Ответ №1:

Я работал над этим недавно. В вашем BlogSerializer вы можете изменить с CommentSerializer(source='comments.content') на CommentSerializer(many=True, read_only=True) .

Я новичок в Restframework, поэтому не совсем понимаю, как это делается.

Комментарии:

1. Но, на мой взгляд, я вернул только объект Blogpost. Как я могу также возвращать объекты комментариев??

2. Изменились ли вы, как указано выше, что вы получили? В моем случае я получил массив объекта comment в качестве свойства объекта blogpost