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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:55:22