Изменение поля 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'},
}