code: def choices(cls, order='natural'):
          
          INC, DEC, NAT = 'sorted', 'reverse', 'natural'
          options = [INC, DEC, NAT]
          assert order in options, "Sorting order not recognized: {}. Available options are: {}".format(order, options)
          if order in [INC, DEC]:
              reverse = order == DEC
              if reverse:
                  attr = '__choices_reverse_'
              else:
                  attr = '__choices_sorted_'
              if not hasattr(cls, attr):
                  setattr(cls, attr, tuple([(c.value, c.label) for c in sorted(list(cls), reverse=reverse)]))
              return getattr(cls, attr)
          else:
              return super(EOrderedChoice, cls).choices()
docs: Generate the choices as required by Django models.
  
          Parameters
          ----------
          order : str
              in which the elements should be returned. Possible values are:
              * 'sorted', the elements will be sorted by `value`
              * 'reverse', the elements will be sorted by `value` as if each comparison were 
                  reversed
              * 'natural' (default), the elements are ordered as when instantiated in the enumeration
                  
          Returns
          -------
          iterable of tuple