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

如何在Django REST Framework的MarketSerializer中获取Exchange外键的name属性?

实现MarketSerializer获取关联Exchange的name字段

有两种常用方法可以实现你的需求,根据场景选择即可:

方法一:直接用source参数关联字段

这是最简单的方式,直接通过source参数指定关联模型的字段路径:

class MarketSerializer(serializers.ModelSerializer):
    # 用source指向关联的Exchange模型的name字段,read_only=True表示该字段仅用于序列化输出
    exchange_name = serializers.CharField(source='exchange.name', read_only=True)
    
    class Meta:
        model = Market
        fields = ('exchange_name', 'price', )

方法二:用SerializerMethodField自定义逻辑

如果需要对exchange.name做额外处理(比如格式转换、空值容错),可以用自定义方法:

class MarketSerializer(serializers.ModelSerializer):
    exchange_name = serializers.SerializerMethodField()
    
    # 对应SerializerMethodField的方法,命名规则为get_<字段名>
    def get_exchange_name(self, obj):
        # 加入空值判断,避免exchange为None时抛出异常
        return obj.exchange.name if obj.exchange else "无关联交易所"
    
    class Meta:
        model = Market
        fields = ('exchange_name', 'price', )

注意事项

如果你的Market模型中exchange字段允许为null(即定义时加了null=True),推荐使用方法二来避免序列化时出现AttributeError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 11:17:20