django rest framework serializer返回名称不是整数

时间:2015-11-08 23:32:42

标签: django django-rest-framework

我正在做一个简单的列表视图,其中当前的返回看起来像这样 -

[
    {
        "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')

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

1 个答案:

答案 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')