我有以下序列化程序类。
class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = ('id', 'name', 'active', 'type', 'user')
列出所有配置文件时,用户字段显示用户ID。如何更改此项以显示user.username?我知道我的模型我只是将它添加到我的元类中,但是没有创建用户模型(它是Django的一部分)。在调用用户显示用户名而不是id时,如何告诉Django?
非常感谢。
答案 0 :(得分:6)
您可以采取两种明显的方法来解决这个问题:
首先,您可以使用dotted.notation
强制user
字段的source argument为user.username
,而不是默认user
。
class ProfileSerializer(serializers.ModelSerializer):
user = serializers.Field(source='user.username')
class Meta:
model = Profile
fields = ('id', 'name', 'active', 'type', 'user')
请注意,Field
是标准的只读字段,因此您无法使用此序列化程序更新用户。
或者,如果您希望用户成为可写字段,您可以使用SlugRelatedField之类的...
class ProfileSerializer(serializers.ModelSerializer):
user = serializers.SlugRelatedField(slug_field='username')
class Meta:
model = Profile
fields = ('id', 'name', 'active', 'type', 'user')
如果您需要,也可以使用第二种方法,但使用只读字段,将read_only=True
添加到SlugField
。
答案 1 :(得分:3)
这个帖子已经过时了,但是由于我最近遇到了同样的问题,我想在其中添加现代答案。 我们必须像这样使用DRF的内置SerializerMethodField():
class ProfileSerializer(serializers.ModelSerializer):
user = serializers.SerializerMethodField()
def get_user(self, obj):
return obj.user.username
class Meta:
model = Profile
fields = ('id', 'name', 'active', 'type', 'user')