Django外键字段返回用户名而非ID的问题排查请求
问题原因
你重写Word模型的__str__方法没用,是因为Django REST Framework的ModelSerializer默认对ForeignKey字段使用PrimaryKeyRelatedField,序列化时只会输出关联对象的主键ID。模型的__str__方法仅用于后台管理、命令行打印对象等场景,不影响接口返回的序列化数据。
解决方案
要让player字段返回用户名称,直接修改WordSerializer,指定player字段的数据源为player.name即可,有两种常用方式:
方式一:直接替换player字段为名称
修改serializers.py中的WordSerializer:
class WordSerializer(serializers.ModelSerializer): # 把默认返回ID的player字段替换为返回用户名称 player = serializers.CharField(source='player.name') class Meta: model = Word fields = ['game', 'turn', 'player', 'word', 'score']
方式二:保留player ID,新增player_name字段(可选)
如果需要同时返回用户ID和名称,可以新增字段:
class WordSerializer(serializers.ModelSerializer): player_name = serializers.CharField(source='player.name') class Meta: model = Word fields = ['game', 'turn', 'player', 'player_name', 'word', 'score']
这种方式下,接口会同时返回player(ID)和player_name(名称),你可以根据需求调整字段列表。
验证效果
修改后重新请求接口,就能得到你期望的返回格式:
[ { "game": 1, "turn": 1, "player": "Bob", "word": "trend", "score": 18 }, { "game": 1, "turn": 2, "player": "Sarah", "word": "test", "score": 12 } ]
内容的提问来源于stack exchange,提问作者Phaneuf
相关产品推荐
相关产品推荐

