如何显示外键字段的名称而不是其 id?

时间:2021-05-15 18:03:17

标签: django django-rest-framework

我需要显示“user_permissions”的名称而不是他们的 ID。

序列化器.py:

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'first_name', 'last_name', 'username', 'email','password','is_active', 
                 'date_joined', 'groups', 'user_permissions')
        extra_kwargs = {'username' : {'read_only': True},'password': {'write_only': True}, 'is_active': 
                       {'read_only': True}, 'date_joined': {'read_only': True}, 'groups':{ 'read_only' : 
                        True} , 'user_permissions':{ 'read_only' : True} }

Views.py:

class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all() 
    serializer_class = UserSerializer

1 个答案:

答案 0 :(得分:2)

您可以使用 StringRelatedSerializer [drf-doc] 在相关模式上调用 str(…),从而返回这些调用的结果列表。例如:

class UserSerializer(serializers.ModelSerializer):
    user_permissions = serializers.StringRelatedField(read_only=True, many=True)

    class Meta:
        model = User
        fields = ('id', 'first_name', 'last_name', 'username', 'email','password','is_active', 
                 'date_joined', 'groups', 'user_permissions')
        extra_kwargs = {
            'username' : {'read_only': True},
            'password': {'write_only': True},
            'is_active': {'read_only': True},
            'date_joined': {'read_only': True},
            'groups':{ 'read_only' : True}
        }