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

Django接口调用报错:Product对象无法JSON序列化

解决Django序列化时Product对象无法JSON序列化的问题

嘿,这个问题我太熟了!你遇到的TypeError: Object of type 'Product' is not JSON serializable错误,本质就是Django REST Framework的序列化器不知道怎么把你的Product模型实例转换成JSON能识别的普通数据类型(比如字符串、数字)。大概率是你在Order序列化器里直接引用了关联的Product对象字段,却没给它指定正确的序列化规则。

下面给你几个实用的解决办法,按需选就行:

方案1:嵌套Product序列化器(返回完整Product信息)

如果你需要把关联的Product的完整信息一起返回,先给Product单独写一个序列化器,然后在Order序列化器里嵌套使用:

# 你的app下的serializers.py
from rest_framework import serializers
from .models import Product, Order

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = ('id', 'name', 'price', 'description')  # 列出你需要返回的Product字段

class OrderSerializer(serializers.ModelSerializer):
    # 假设你的Order模型里关联Product的外键字段叫product
    product = ProductSerializer()
    # 如果是多对多关系,记得加many=True:product = ProductSerializer(many=True)

    class Meta:
        model = Order
        fields = ('id', 'order_sn', 'create_time', 'product')  # 其他你需要的Order字段

方案2:只返回Product的单个标识字段(比如ID/名称)

如果不需要Product的完整信息,只需要它的某个标识(比如ID或者名称),直接通过source指定字段来源就行:

class OrderSerializer(serializers.ModelSerializer):
    # 返回Product的ID
    product_id = serializers.IntegerField(source='product.id')
    # 返回Product的名称
    product_name = serializers.CharField(source='product.name')

    class Meta:
        model = Order
        fields = ('id', 'order_sn', 'product_id', 'product_name')

方案3:自定义返回内容(灵活拼接信息)

如果需要更灵活的处理,比如把Product的多个字段拼接成一个字符串返回,可以用SerializerMethodField:

class OrderSerializer(serializers.ModelSerializer):
    product_detail = serializers.SerializerMethodField()

    # 自定义方法,参数obj是当前的Order实例
    def get_product_detail(self, obj):
        return f"商品:{obj.product.name},单价:{obj.product.price}元"

    class Meta:
        model = Order
        fields = ('id', 'order_sn', 'product_detail')

最后再检查一下你的Order模型,确认关联Product的字段(比如ForeignKey)没有配置错误,一般用上面的方法都能解决这个序列化问题~

内容的提问来源于stack exchange,提问作者Doing Things Occasionally

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:04:07