Как искать кортежи в Serializer? - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть 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 в поле вместо возвращения мужчины. Я хочу вернуть мужчину вместо 1. Для этого я сделал функцию get_gender () для поиска из кортежа и возврата значения для этого объекта Id .. Итак, мой вопрос: как мне написать функцию get_gender () для поиска кортежа Gender.

Извините за английский, я надеюсь, что вы поймете мой вопрос

1 Ответ

0 голосов
/ 06 сентября 2018

Использовать метод модели get_FOO_display:

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

Или просто укажите как источник поля:

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

Обратите внимание, что ваш GENDER кортеж имеет неправильное значение. Это должно быть (actual_value, human_readable) вот так:

GENDER =(
    (1, 'MALE'),
    (2, 'FEMALE'),
    (3, 'OTHERS')
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...