(自用防再踩坑记录1)实现名字直接转化为拼音并添加入接口

首先安装汉字转拼音的第三方包,十分好用的包> pip install xpinyin

在serializers.py中的相应的serializer中添加如下代码:

from xpinyin import Pinyin
p = Pinyin()  
class exp_userpro_list_Serializer(serializers.ModelSerializer):    #exp_userpro为数据库表
    """
    用户列表页显示的信息
    """
    name_change_to_pinying = serializers.SerializerMethodField(help_text='名字转拼音')   #添加字段(此字段数据库中不存在)
    def get_name_change_to_pinying(self, obj):  #定义此字段需要返回的数据
        return p.get_pinyin(obj.name)   #将名字转化为拼音
    class Meta:
        model = exp_userpro   #数据库表
        exclude = ('password','user_permissions','last_login','is_superuser','first_name','last_name',
                   'is_staff','date_joined','cardID','birthDate','gender',
                   'add_time','groups')

这是详情页面的serializer,也需要添加把名字转化成拼音的字段

class exp_userproSerializer(serializers.ModelSerializer):
    """
    用户信息
    """
    name_change_to_pinying = serializers.SerializerMethodField(help_text='名字转拼音')
    def get_name_change_to_pinying(self, obj):
        return p.get_pinyin(obj.name)
 
    class Meta:
        model = exp_userpro
        exclude = ('password','user_permissions','last_login','is_superuser','first_name','last_name',
                   'is_staff','date_joined','cardID','birthDate','gender',
                   'add_time','groups',)

在views.py中相应的viewset中添加代码:

class exp_userproViewSet(viewsets.ModelViewSet):
    """
        list
            用户列表页
        create:
            创建用户信息表(需要创建两份)
        delete:
            删除用户信息
        update:
            修改用户信息
        partial_update:
            修改用户信息
    """
    authentication_classes = (TokenAuthentication, SessionAuthentication)
    permission_classes = [IsAuthenticated, ]
    pagination_class = StandardResultsSetPagination
    filter_backends = (DjangoFilterBackend,)
    filter_class = exp_userproFilter
 
    def get_queryset(self):
        # return exp_userpro.objects.filter(id=self.request.user.id)
        return exp_userpro.objects.filter(is_active=True)
 
    def get_permissions(self):
        if self.action == "retrieve":
            return [permissions.IsAuthenticated()]
        return []
 
    def get_serializer_class(self):
        if self.action == 'list':
            return exp_userpro_list_Serializer   #返回我们上面写的那个list_serializer
        return exp_userproSerializer
 
    def perform_create(self, serializer):
        serializer.save()

添加完成后,如果没错那么应该添加成功了

效果:接口页面如下

            "id": "2338727a-3db8-4d93-8564-d5c03027f236",
            "timestampCreate": "2018-01-09T22:49:38.343494",
            "name_change_to_pinying": "huang-fei-hu", 
             #此为添加的字段,将name转化为拼音,注意此字段在数据库中不存在
            "is_active": true,
            "oldId": "None",
            "name": "黄飞虎",
            "name_pinyin": "Huang Feihu",
            "username": "hhuangfh",
            "mobile": "**********",
            "email": "**********.com"

-------完

你可能感兴趣的:((自用防再踩坑记录1)实现名字直接转化为拼音并添加入接口)