gpt4 book ai didi

djangorest框架序列化器返回名称不是整数

转载 作者:行者123 更新时间:2023-12-02 04:16:09 25 4
gpt4 key购买 nike

我正在做一个简单的 ListView ,其中当前返回如下所示 -

[
{
"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 的读取方式不同,它不遵守外键映射和返回?

这样做不起作用,因为它试图用已经存在的 owner 覆盖 owner -

class ClassListSerializer(serializers.ModelSerializer):
owner = serializers.CharField(source='owner.username')
class Meta:
model=ClassList
fields = ('name', 'description', 'owner')

那么如何让它显示名称而不是整数呢?

最佳答案

SlugRelatedField正是您正在寻找的:

class ClassListSerializer(serializers.ModelSerializer):
owner = serializers.SlugRelatedField(
slug_field='username',
queryset=User.objects.all())
class Meta:
model=ClassList
fields = ('name', 'description', 'owner')

关于djangorest框架序列化器返回名称不是整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33600317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com