Ошибка при размещении вариантов в поле Charfield в сериализаторе, который не основан на модели - Django Rest Framework

Я делаю сериализатор, который не основан на модели, и одно из полей - это charfield, в который я хочу поместить определенный выбор. Возможно ли это?

Ошибка, которую я получаю, когда ввожу код:

TypeError: init() получил неожиданный аргумент ключевого слова 'choices'

STATUS_TYPES = (
    ('', ''),
    ('male', 'male'),
    ('female', 'female')
)

class SomeSerializer(serializers.Serializer):
    gender = serializers.CharField(max_length=100, choices=GENDER_TYPES)

Для использования поля выбора в Django Rest Framework используйте : ChoiceField или MultipleChoiceField вместо Charfield(..., choices=(...))

В вашем случае :

class SomeSerializer(serializers.Serializer):
    gender = serializers.ChoiceField(choices=GENDER_TYPES)

Для этого существует обходной путь с использованием SerializerMethodField. Я предполагаю, что первый элемент в кортеже GENDER_TYPES является источником, а второй - тем, чем вы хотите его видеть.

GENDER_TYPES = (
    ('', ''),
    ('male', 'male'),
    ('female', 'female')
)

class SomeSerializer(serializers.Serializer):
    gender = serializers.SerializerMethodField()
    
    def get_gender(self, obj):
        return next(filter(lambda gt: gt[0] == obj['gender'], GENDER_TYPES))[1]
Вернуться на верх