Как создать нечувствительное к регистру поле выбора из обычного поля выбора 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