【发布时间】:2021-02-11 12:10:42
【问题描述】:
每篇博文我都有一个评论栏。 我想将 Views.py 中的 Comment.objects.all() 传递给 ModelSerializer def get_cmets(self, obj) 以减少 sql 查询的数量。因为我正在序列化博客文章列表
Views.py
class BlogViewSet(ModelViewSet):
queryset = Blog.objects.all().annotate(
author_name=F('author__username')
)
serializer_class = BlogSerializer
permission_classes = [IsOwnerOrReadOnly]
def list(self, request):
return Response({'blogs': BlogSerializer(self.queryset, many=True).data})
Serializers.py
class BlogSerializer(ModelSerializer):
author_name = serializers.CharField(read_only=True)
comments = SerializerMethodField()
class Meta:
model = Blog
fields = ('title_text', 'main_text', 'datepublished', 'author_name', 'id', 'comments')
def get_comments(self, obj):
# filter comment
comment_object = Comment.objects.filter(post_id=obj.id)
comments = CommentSerializer(comment_object, many=True).data
return comments
【问题讨论】:
标签: python django django-rest-framework