#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