我正在做一个简单的列表视图,其中当前的返回看起来像这样 -
[
{
"name": "John",
"description": "John's Group",
"owner": 1
}
]
问题是我不想要那个我希望它显示的整数 -
[
{
"name": "John",
"description": "John's Group",
"owner": "John Smith"
}
]
我发现的唯一方法是做一个像这样的序列化器 -
class ClassListSerializer(serializers.ModelSerializer):
ownername = serializers.CharField(source='owner.username')
class Meta:
model=ClassList
fields = ('name', 'description', 'ownername')
问题在于我不想将字段更改为ownername
。
在模型中设置以下内容适用于传统的模型查询 -
def __str__(self):
return self.username
但是我想因为DRF读取不同而不遵守ForeignKey映射并返回?
执行此操作无效,因为它正在尝试使用已存在的owner
覆盖owner
-
class ClassListSerializer(serializers.ModelSerializer):
owner = serializers.CharField(source='owner.username')
class Meta:
model=ClassList
fields = ('name', 'description', 'owner')
那么如何让它显示名称而不是整数呢?
答案 0 :(得分:3)
SlugRelatedField正是您所需要的:
class ClassListSerializer(serializers.ModelSerializer):
owner = serializers.SlugRelatedField(
slug_field='username',
queryset=User.objects.all())
class Meta:
model=ClassList
fields = ('name', 'description', 'owner')