L.Stefan
L.Stefan

Reputation: 346

Change inherit field to required in a Serializer

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 field1to 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

Answers (1)

L.Stefan
L.Stefan

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

Related Questions