You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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']

关键修正点说明

  1. 移除错误的source配置:likes和dislikes是通过annotate直接添加到Comment实例的字段,无需指定source='comments.likes',序列化器会自动从当前Comment对象读取这些字段。
  2. 修正序列化器名称引用:原代码中定义的是CommentVoteSerializer,但在CommentSerializer里误写为CommentLikesSerializer,导致无法找到对应序列化器。
  3. 移除many=True:每个Comment对应唯一一组点赞/踩数据,不需要将嵌套序列化器标记为列表类型,many=True会导致序列化器尝试将单个数据解析为列表,引发错误。

内容的提问来源于stack exchange,提问作者lucio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 23:27:33