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

Django REST Framework序列化器如何获取creator.username而非ID?

如何在Django REST Framework序列化器中将creator字段从ID改为返回username?

嘿,这个需求其实挺常见的,我给你分享几种简单可行的实现方式,你可以根据自己的场景选择:

方法1:使用SerializerMethodField(最灵活)

这种方式适合需要自定义逻辑的场景,比如你后续可能要对username做额外处理(比如拼接前缀),代码修改如下:

from django.contrib.auth.models import User
from engine.models import Game
from rest_framework import serializers

class GameSerializer(serializers.ModelSerializer):
    # 覆盖原有的creator字段,用自定义方法返回username
    creator = serializers.SerializerMethodField()

    class Meta:
        model = Game
        fields = ('game_name', 'level', 'game_type', 'creator', 'id', )

    def get_creator(self, obj):
        # obj是当前的Game实例,通过关联关系拿到User对象的username
        return obj.creator.username

SerializerMethodField会自动调用命名为get_<字段名>的方法,这里就是get_creator,你可以在这个方法里写任何你需要的逻辑。

方法2:使用StringRelatedField(最简洁)

如果你的User模型的__str__方法默认返回的是username(Django自带的User模型确实是这样的),那用这个方法最省事,不需要额外写方法:

from django.contrib.auth.models import User
from engine.models import Game
from rest_framework import serializers

class GameSerializer(serializers.ModelSerializer):
    # StringRelatedField会返回关联对象的字符串表示(即__str__的返回值)
    creator = serializers.StringRelatedField()

    class Meta:
        model = Game
        fields = ('game_name', 'level', 'game_type', 'creator', 'id', )

方法3:使用SlugRelatedField(最明确)

如果你不想依赖模型的__str__方法(比如担心后续__str__被修改),可以用这个方法明确指定要返回的字段:

from django.contrib.auth.models import User
from engine.models import Game
from rest_framework import serializers

class GameSerializer(serializers.ModelSerializer):
    # 指定slug_field为username,read_only=True表示只用于序列化输出
    creator = serializers.SlugRelatedField(slug_field='username', read_only=True)

    class Meta:
        model = Game
        fields = ('game_name', 'level', 'game_type', 'creator', 'id', )

总结一下:

  • 如果你需要自定义逻辑,选SerializerMethodField
  • 如果你想快速实现且依赖默认__str__,选StringRelatedField
  • 如果你想明确指定字段不依赖模型方法,选SlugRelatedField

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:55:47