Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django rest框架序列化程序返回名称不是整数_Django_Django Rest Framework - Fatal编程技术网

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方面存在问题。谢谢你,这正是我想要的!