who*_*rth 2 django django-rest-framework
我正在做一个简单的列表视图,其中当前返回如下所示 -
[
{
"name": "John",
"description": "John's Group",
"owner": 1
}
]
Run Code Online (Sandbox Code Playgroud)
问题是我不想要那个整数,我希望它像这样显示 -
[
{
"name": "John",
"description": "John's Group",
"owner": "John Smith"
}
]
Run Code Online (Sandbox Code Playgroud)
我发现的解决这个问题的唯一方法是做一个像这样的序列化器 -
class ClassListSerializer(serializers.ModelSerializer):
ownername = serializers.CharField(source='owner.username')
class Meta:
model=ClassList
fields = ('name', 'description', 'ownername')
Run Code Online (Sandbox Code Playgroud)
问题是我不想将该字段更改为ownername.
在模型中设置以下内容适用于模型的传统查询 -
def __str__(self):
return self.username
Run Code Online (Sandbox Code Playgroud)
但我猜因为 DRF 的读取方式不同,它不遵守外键映射并返回?
这样做是行不通的,因为它试图覆盖已经存在的内容owner-owner
class ClassListSerializer(serializers.ModelSerializer):
owner = serializers.CharField(source='owner.username')
class Meta:
model=ClassList
fields = ('name', 'description', 'owner')
Run Code Online (Sandbox Code Playgroud)
那么如何让它显示名称而不是整数呢?
SlugRelatedField正是您正在寻找的:
class ClassListSerializer(serializers.ModelSerializer):
owner = serializers.SlugRelatedField(
slug_field='username',
queryset=User.objects.all())
class Meta:
model=ClassList
fields = ('name', 'description', 'owner')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
731 次 |
| 最近记录: |