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

Django REST Framework嵌套序列化产品关联配料报错如何解决

问题原因

你遇到的报错核心是IngredientProductRelationSerializer的书写格式错误:DRF 规定模型序列化器的model、fields等配置项必须放在名为Meta的内部子类中,你当前直接把这两个配置作为序列化器的直接类属性,DRF 无法识别序列化规则,处理关联集合时就抛出了'list' object has no attribute 'values'的错误。

解决方法

1. 修正序列化器配置

调整serializers.py的代码,给IngredientProductRelationSerializer补全Meta内部类,同时取消注释关联字段的序列化配置:

class IngredientProductRelationSerializer(serializers.ModelSerializer):
    # 配置项必须放在Meta子类中
    class Meta:
        model = IngredientProductRelation
        fields = ['ingredient', 'quantity']

class ProductSerializer(serializers.ModelSerializer):
    # 取消该行注释
    ingredients = IngredientProductRelationSerializer(read_only=True, many=True)

    class Meta:
        model = Product
        fields = ['id', 'name', 'classification', 'ingredients']

2. 可选性能优化

为了避免接口查询时产生N+1性能问题,调整views.py的查询集,预加载关联的配料数据:

class IngredientViewsets(viewsets.ReadOnlyModelViewSet):
    # 预取关联的ingredients字段,减少数据库查询次数
    queryset = Product.objects.all().prefetch_related('ingredients')
    serializer_class = ProductSerializer

修改完成后重启服务,接口返回的ingredients字段就会是你预期的包含ingredient(配料ID)和quantity(用量)的嵌套结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:15:01