Как создать нечувствительное к регистру поле выбора из обычного поля выбора DRF?
Я пытаюсь создать нечувствительный к регистру файл выбора, например CaseInsensitiveChoiceField, который наследует и изменяет serializers.ChoiceField
предположим, я создаю сериализатор следующим образом
from rest_framework import serializers
my_field_choices = ["A", "BCD", "e"]
class MySerializer(serializers.Serializer):
my_field = serializers.ChoiceField(choices=my_field_choices)
этот сериализатор не подтверждает, если я передаю ему data={"my_field": "a"} или data={"my_field": "BCd"} или {"my_field": "E"}.
что я мог сделать, так это
from rest_framework import serializers
my_field_choices = ["A", "BCD", "e"]
class MySerializer(serializers.Serializer):
my_field = serializers.ChoiceField(choices=[item.upper() for item in my_field_choices])
и затем изменить данные и передать их ему:
data = request.body
data["my_field"] = data["my_field"].upper()
Однако, это не очень чисто, и я не хочу изменять тело запроса из-за валидации. Я ищу способ создать CaseInsensitiveChoiceField, который настраивает ChoiceField и наследуется от него. Есть идеи, как это сделать?
Кроме того, я хочу, чтобы MySerializer.data возвращал регистр my_field, независимо от того, в верхнем или нижнем регистре передаются данные.
В общем, я хочу, чтобы мой сериализатор принимал варианты верхнего или нижнего регистра, но возвращал все данные в нижнем регистре.
Я не совсем понимаю, как работают эти сериализаторы и поля. В противном случае, возможно, я смогу это сделать.
Эта статья может быть полезна https://medium.com/@luccascorrea/django-rest-framework-creating-a-custom-serializer-field-de3e29846bc