Pro*_*eus 3 django django-rest-framework
我有以下序列化程序类.
class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = ('id', 'name', 'active', 'type', 'user')
Run Code Online (Sandbox Code Playgroud)
列出所有配置文件时,用户字段显示用户ID.如何更改此项以显示user.username?我知道我的模型我只是将它添加到我的元类中,但是没有创建用户模型(它是Django的一部分).在调用用户显示用户名而不是id时,如何告诉Django?
非常感谢.
两种明显的方法可以解决这个问题:
首先,你可以使用dotted.notation强制的源参数的的user领域是user.username,而不是默认user.
class ProfileSerializer(serializers.ModelSerializer):
user = serializers.Field(source='user.username')
class Meta:
model = Profile
fields = ('id', 'name', 'active', 'type', 'user')
Run Code Online (Sandbox Code Playgroud)
请注意,这Field是标准的只读字段,因此您无法使用此序列化程序更新用户.
或者,如果您希望用户成为可写字段,您可以像这样使用SlugRelatedField ...
class ProfileSerializer(serializers.ModelSerializer):
user = serializers.SlugRelatedField(slug_field='username')
class Meta:
model = Profile
fields = ('id', 'name', 'active', 'type', 'user')
Run Code Online (Sandbox Code Playgroud)
如果你想要你也可以使用第二种方法,但使用只读字段,通过添加read_only=True到SlugField.
这个线程很旧,但由于我最近遇到了同样的问题,我想为其添加现代答案。我们必须像这样使用 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')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2798 次 |
| 最近记录: |