django rest框架序列化程序返回名称不是整数
我正在做一个简单的列表视图,其中当前返回值如下所示-django rest框架序列化程序返回名称不是整数,django,django-rest-framework,Django,Django Rest Framework,我正在做一个简单的列表视图,其中当前返回值如下所示- [ { "name": "John", "description": "John's Group", "owner": 1 } ] [ { "name": "John", "description": "John's Group", "owner": "John Smith" } ] class ClassLis
[
{
"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')
问题是我不想要整数,我想要它像这样显示-
[
{
"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')
我发现唯一的解决方法就是做一个像这样的序列化程序-
[
{
"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')
那么如何让它显示名称而不是整数呢?正是您想要的:
class ClassListSerializer(serializers.ModelSerializer):
owner = serializers.SlugRelatedField(
slug_field='username',
queryset=User.objects.all())
class Meta:
model=ClassList
fields = ('name', 'description', 'owner')
多年来,我发现自己在RTFM方面存在问题。谢谢你,这正是我想要的!