How to show name of the foreign key field instead of its id?

Viewed 159

I need to show the names of 'user_permissions' instead of their id's.

Serializers.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 Answers

You can work with a StringRelatedSerializer [drf-doc] to call str(…) on the related mode, and thus return a list of the results of these calls. For example:

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}
        }
Related