首页 > 解决方案 > 如何在序列化器中查找元组?

问题描述

我有这样的models.py

GENDER =(
    ('MALE',1),
    ('FEMALE',2),
    ('OTHERS',3)
    )

class User(BaseModel, AbstractUser):
    type = models.IntegerField(choices=USER_TYPE,null=True)
    gender = models.IntegerField(choices=GENDER,null=True)

列出学生的 Views.py 是这样的

def list(self,request):

    for adm in StudentAdmission.objects.all():
        user = adm.student.user

        tmp['user']  = UserGetSerializer(user).data

        ud = UserDetail.objects.filter(user_id=user.id)
        if ud:
            tmp['user_detail'] = UserDetailSerializer(ud.first()).data

像这样的serializer.py ...

class UserBaseSerializer(serializers.Serializer):
    first_name = serializers.CharField(max_length=120,required=True)
    last_name = serializers.CharField(max_length=120,required=True)
    email = serializers.EmailField(required=True)


class UserSerializer(UserBaseSerializer):
    gender = serializers.IntegerField()
    type = serializers.IntegerField(default=3)


class UserGetSerializer(UserBaseSerializer):
    gender = serializers.SerializerMethodField()
    type = serializers.IntegerField(default=3)

    def get_gender(self, obj):

        #Here Confusion

        return {'id':obj.gender, 'value':value}

它以性别返回输出 1 而不是返回男性。我想返回 male 而不是 1 。为此,我创建了一个 get_gender() 函数来从元组中查找并返回该对象 ID 的值。所以我的问题是如何编写 get_gender() 函数来查找 Gender 元组。

对不起英语我希望你能理解我的问题

标签: pythondjangodjango-rest-framework

解决方案


使用模型的get_FOO_display方法:

def get_gender(self, obj):
    return obj.get_gender_display()

或者只是指定 is 作为字段的来源:

class UserGetSerializer(UserBaseSerializer):
    gender = serializers.CharField(source='get_gender_display')

请注意,您的GENDER元组具有错误的值。它应该是(actual_value, human_readable)这样的:

GENDER =(
    (1, 'MALE'),
    (2, 'FEMALE'),
    (3, 'OTHERS')
)

推荐阅读