Ошибка при размещении вариантов в поле 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]