Изменение поля inherit на required в сериализаторе

У меня есть такой сериализатор:

from rest_framework import serializers

class MySerializer(serializers.Serializer):
    field1 = serializers.CharField(required=False)
    field2 = serializers.IntegerField(required=False)
    field3 = serializers.BooleanField(required=False)
    ...

Я хочу наследовать этот класс, но изменить field1 на required=True, кто может мне это сделать?

Я знаю, что могу переопределить поле следующим образом:

class MySerializer2(MySerializer):
    field1 = serializers.CharField(required=True)

Но мне не нравится это делать.

Вы можете передать дополнительные kwargs в классе Meta следующим образом:

class MySerializer2(MySerializer):

    class Meta:
        extra_kwargs = {'field1': {'required': True}}

Но я не уверен на 100%, что это правильно.

Лучшим способом, который я нашел для решения этой проблемы, является изменение свойства поля в сериализаторе __init__:

class MySerializer(serializers.Serializer):
    field1 = serializers.CharField(required=False)
    field2 = serializers.IntegerField(required=False)
    field3 = serializers.BooleanField(required=False)
    ...

    def __init__(self, instance=None, **kwargs):
        super().__init__(instance=instance, data=data, **kwargs)
        if hasattr(self,'update_fields'):
            to_update= self.update_fields
            for field in to_update:
                for attr, value in to_update[field].items():
                    setattr(self.fields[field], attr, value)

Теперь мне просто нужно установить атрибут update_fields с полями и свойствами, которые я хочу изменить,

class MySerializer2(MySerializer):
    update_fields = {
        'field1': {'required':True},
        'field2': {'help_text': 'New help text'},
    }
Вернуться на верх