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

Вернуться на верх