'Returns a list of all field names that are possible for this model
(including reverse relation names). This is used for pretty printing
debugging output (a list of choices), so any internal-only field names
are not included.'

def get_all_field_names(self):

    try:
        cache = self._name_map
    except AttributeError:
        cache = self.init_name_map()
    names = sorted(cache.keys())
    return [val for val in names if (not val.endswith(u'+'))]
