'Returns an ITERATOR of all non-cmsplugin reverse related fields.'

def _get_attached_fields(self):

    from cms.models import CMSPlugin, UserSettings
    if (not hasattr(self, '_attached_fields_cache')):
        self._attached_fields_cache = []
        relations = self._get_related_objects()
        for rel in relations:
            if issubclass(rel.model, CMSPlugin):
                continue
            from cms.admin.placeholderadmin import PlaceholderAdminMixin
            related_model = rel.related_model
            try:
                admin_class = admin.site._registry[related_model]
            except KeyError:
                admin_class = None
            is_user_settings = (related_model == UserSettings)
            if (is_user_settings or isinstance(admin_class, PlaceholderAdminMixin)):
                field = getattr(self, rel.get_accessor_name())
                try:
                    if field.exists():
                        self._attached_fields_cache.append(rel.field)
                except:
                    pass
    return self._attached_fields_cache
