docs: def _normalize_coerce_to_field_dict(self, v):
          """ coerces strings to a dict {'value': str} """
  
          def tokenize(s):
              """ Tokenize a string by splitting it by + and -
  
              >>> tokenize('this + that')
              ['this', '+', 'that']
  
              >>> tokenize('this+that')
              ['this', '+', 'that']
  
              >>> tokenize('this+that-other')
              ['this', '+', 'that', '-', 'other]
              """
  
              # Crude tokenization
              s = s.replace('+', ' + ').replace('-', ' - ') \
                  .replace('/', ' / ').replace('*', ' * ')
              words = [w for w in s.split(' ') if w]
              return words
  
          if isinstance(v, _str_type):
              field_parts = tokenize(v)
              field = field_parts[0]
              d = {'value': field}
              if len(field_parts) > 1:
                  # if we need to add and subtract from the field join the field
                  # parts into pairs, for instance if field parts is
                  #     [MyTable.first, '-', MyTable.second, '+', MyTable.third]
                  # we will get two pairs here
                  #     [('-', MyTable.second), ('+', MyTable.third)]
                  d['operators'] = []
                  for operator, other_field in zip(
                      field_parts[1::2], field_parts[2::2]
                  ):
                      d['operators'].append({
                          'operator': operator,
                          'field': {
                              'value': other_field
                          }
                      })
              return d
          else:
              return v