如何在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
相关产品推荐
相关产品推荐

