Reputation: 346
I have a serializer like that:
from rest_framework import serializers
class MySerializer(serializers.Serializer):
field1 = serializers.CharField(required=False)
field2 = serializers.IntegerField(required=False)
field3 = serializers.BooleanField(required=False)
...
I want to inherit this class but changing field1
to required=True
, who can I do that?
I know that I can redefine the field like this:
class MySerializer2(MySerializer):
field1 = serializers.CharField(required=True)
But I dont like to do this.
Upvotes: 2
Views: 859
Reputation: 346
The better way I found to solve this until now is to change the field property on the Serializer __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)
Now I just need to set the update_fields
attribute with the fields and properties I want to modify,
class MySerializer2(MySerializer):
update_fields = {
'field1': {'required':True},
'field2': {'help_text': 'New help text'},
}
Upvotes: 2