0

I want to have serializer with field which can take integer(not floats or any other numeric type!) or string as an input.Is there any way to make it better/more pretty?

class MyField(Field):
    def to_representation(self, value):
        if isinstance(value, int):
            return value
        elif isinstance(value, str):
            return value
        else:
            raise ValidationError('Error')

    def to_internal_value(self, data):
        if isinstance(data, int):
            return data
        elif isinstance(data, str):
            return data
        else:
            raise ValidationError('Error')

class MySerializer(Serializer):
    my_field = MyField()
kedod
  • 121
  • 1
  • 8

1 Answers1

4

You may combine the conditions as below:

class MyField(Field):
    def to_representation(self, value):
        if isinstance(value, int):
            return value
        elif isinstance(value, str) and value.isdigit():
            return value
        raise ValidationError('Error')

    def to_internal_value(self, data):
        if isinstance(data, int):
            return data
        elif isinstance(data, str) and data.isdigit():
            return data
        raise ValidationError('Error')

class MySerializer(Serializer):
    my_field = MyField()
Arn
  • 1,898
  • 12
  • 26