code: def make_echoicefield(echoices, *args, klass_name=None, **kwargs):
      assert issubclass(echoices, EChoice)
      value_type = echoices.__getvaluetype__()
      if value_type is str:
          cls_ = models.CharField
      elif value_type is int:
          cls_ = models.IntegerField
      elif value_type is float:
          cls_ = models.FloatField
      elif value_type is bool:
          cls_ = models.BooleanField
      else:
          raise NotImplementedError("Please open an issue if you wish your value type to be supported: "
                                    "https://github.com/mbourqui/django-echoices/issues/new")
      if klass_name and StrictVersion(django_version()) < StrictVersion('1.9.0'):
          warnings.warn("Django < 1.9 throws an 'ImportError' if the class name is not defined in the module. "
                        "The provided klass_name will be replaced by {}".format(EChoiceField.__name__), RuntimeWarning)
      klass_name = EChoiceField.__name__ if StrictVersion(django_version()) < StrictVersion('1.9.0') else \
          klass_name if klass_name else "{}Field".format(echoices.__name__)
      d = dict(cls_.__dict__)
      d.update(dict(EChoiceField.__dict__))
      return type(klass_name, (cls_,), d)(echoices, *args, **kwargs)