DRF技术问题:如何将多个注解字段添加到嵌套序列化器
解决方案
你的问题主要出在序列化器的source配置、名称引用和many=True的误用,以下是修正后的代码:
修正后的serializers.py
from rest_framework import serializers from .models import Comment class CommentVoteSerializer(serializers.Serializer): likes = serializers.IntegerField() dislikes = serializers.IntegerField() class Meta: fields = ['likes', 'dislikes'] class CommentSerializer(serializers.ModelSerializer): # 修正序列化器名称,移除多余的many=True rating = CommentVoteSerializer(read_only=True) class Meta: model = Comment fields = ['id', 'text', 'pub_date', 'rating']
关键修正点说明
- 移除错误的source配置:
likes和dislikes是通过annotate直接添加到Comment实例的字段,无需指定source='comments.likes',序列化器会自动从当前Comment对象读取这些字段。 - 修正序列化器名称引用:原代码中定义的是
CommentVoteSerializer,但在CommentSerializer里误写为CommentLikesSerializer,导致无法找到对应序列化器。 - 移除many=True:每个Comment对应唯一一组点赞/踩数据,不需要将嵌套序列化器标记为列表类型,
many=True会导致序列化器尝试将单个数据解析为列表,引发错误。
内容的提问来源于stack exchange,提问作者lucio
相关产品推荐
相关产品推荐

