nodes.append(save_node) def get_media(self, media): if self.is_list_sortable: media = media + self.vendor('xadmin.plugin.sortablelist.js') return media class SaveOrderView(ModelAdminView): @csrf_protect_m @transaction.atomic def post(self, request): order_objs = request.POST.getlist("order[]") for order_value, pk in enumerate(order_objs, start=1): self.save_order(pk, order_value) return self.render_response({}) def save_order(self, pk, order_value): obj = self.model.objects.get(pk=pk) order_field = self.list_order_field is_order_changed = lambda x: getattr(x, order_field) != order_value if is_order_changed(obj): setattr(obj, order_field, order_value) obj.save() site.register_plugin(SortableListPlugin, ListAdminView) site.register_modelview(r'^save-order/$', SaveOrderView, name='%s_%s_save_order')
{'name': _(u"Bootstrap2"), 'description': _(u"Bootstrap 2.x theme"), 'css': self.bootstrap2_theme}] select_css = context.get('site_theme', self.default_theme) if self.user_themes: themes.extend(self.user_themes) if self.use_bootswatch: ex_themes = cache.get(THEME_CACHE_KEY) if ex_themes: themes.extend(json.loads(ex_themes)) else: ex_themes = [] try: watch_themes = json.loads(urllib.urlopen( 'http://api.bootswatch.com/3/').read())['themes'] ex_themes.extend([ {'name': t['name'], 'description': t['description'], 'css': t['cssMin'], 'thumbnail': t['thumbnail']} for t in watch_themes]) except Exception: pass cache.set(THEME_CACHE_KEY, json.dumps(ex_themes), 24 * 3600) themes.extend(ex_themes) nodes.append(loader.render_to_string('xadmin/blocks/comm.top.theme.html', {'themes': themes, 'select_css': select_css})) site.register_plugin(ThemePlugin, BaseAdminView)
try: layout_pos = UserSettings.objects.get( user=self.user, key=self._portal_key()).value layout_cs = layout_pos.split('|') for i, c in enumerate(cs): c.fields = [fs_map.pop(j) for j in layout_cs[i].split( ',') if j in fs_map] if len(layout_cs) > i else [] if fs_map and cs: cs[0].fields.extend(fs_map.values()) except Exception: pass return helper def block_form_top(self, context, node): # put portal key and submit url to page return "<input type='hidden' id='_portal_key' value='%s' />" % self._portal_key() class ModelDetailPlugin(ModelFormPlugin): def _portal_key(self): return '%s_%s_detail_portal' % (self.opts.app_label, self.opts.module_name) def block_after_fieldsets(self, context, node): # put portal key and submit url to page return "<input type='hidden' id='_portal_key' value='%s' />" % self._portal_key() site.register_plugin(ModelFormPlugin, ModelFormAdminView) site.register_plugin(ModelDetailPlugin, DetailAdminView)
@filter_hook @csrf_protect_m @dutils.commit_on_success def post(self, request, object_id): model_fields = [f.name for f in self.opts.fields] fields = [f for f in request.POST.keys() if f in model_fields] defaults = { "form": forms.ModelForm, "fields": fields, "formfield_callback": self.formfield_for_dbfield, } form_class = modelform_factory(self.model, **defaults) form = form_class( instance=self.org_obj, data=request.POST, files=request.FILES) result = {} if form.is_valid(): form.save(commit=True) result['result'] = 'success' result['new_data'] = form.cleaned_data result['new_html'] = dict( [(f, self.get_new_field_html(f)) for f in fields]) else: result['result'] = 'error' result['errors'] = JsonErrorDict(form.errors, form).as_json() return self.render_response(result) site.register_plugin(EditablePlugin, ListAdminView) site.register_modelview(r'^(.+)/patch/$', EditPatchView, name='%s_%s_patch')
return None if hasattr(func, 'short_description'): description = func.short_description else: description = action return func, action, description, getattr(func, 'icon', 'tasks') def result_header(self, item, field_name, row): if item.attr and field_name == 'action_checkbox': item.classes.append("action-checkbox-column") return item def result_item(self, item, obj, field_name, row): if item.field is None and field_name == u'action_checkbox': item.classes.append("action-checkbox") return item def get_media(self, media): if self.admin_view.result_count: media = media + self.vendor('xadmin.plugin.actions.js', 'xadmin.plugins.css') return media def block_results_bottom(self, context, nodes): if self.admin_view.result_count: _tpl = 'xadmin/blocks/grid.results_bottom.actions.html' if self.admin_view.grid else 'xadmin/blocks/form.results_bottom.actions.html' nodes.append(loader.render_to_string(_tpl, context_instance=context)) site.register_plugin(ActionPlugin, ListAdminView) site.register_plugin(ActionPlugin, GridPage) site.register_plugin(ActionPlugin, UpdateAdminView)
from xadmin.sites import site from xadmin.views import BaseAdminPlugin, CommAdminView BUILDIN_STYLES = { 'default': 'xadmin/includes/sitemenu_default.html', 'accordion': 'xadmin/includes/sitemenu_accordion.html', } class SiteMenuStylePlugin(BaseAdminPlugin): menu_style = None def init_request(self, *args, **kwargs): return bool(self.menu_style) and self.menu_style in BUILDIN_STYLES def get_context(self, context): context['menu_template'] = BUILDIN_STYLES[self.menu_style] return context site.register_plugin(SiteMenuStylePlugin, CommAdminView)
return active def result_item(self, item, obj, field_name, row): if self._current_layout == 'thumbnails': if getattr(item.attr, 'is_column', True): item.field_label = label_for_field( field_name, self.model, model_admin=self.admin_view, return_attr=False ) if getattr(item.attr, 'thumbnail_img', False): setattr(item, 'thumbnail_hidden', True) row['thumbnail_img'] = item elif item.is_display_link: setattr(item, 'thumbnail_hidden', True) row['thumbnail_label'] = item return item # Block Views def block_top_toolbar(self, context, nodes): if len(self._active_layouts) > 1: context.update({ 'layouts': self._active_layouts, 'current_icon': self._current_icon, }) nodes.append(loader.render_to_string('xadmin/blocks/model_list.top_toolbar.layouts.html', context=context)) site.register_plugin(GridLayoutPlugin, ListAdminView)
return func, action, description, getattr(func, 'icon', 'tasks') # View Methods def result_header(self, item, field_name, row): if item.attr and field_name == 'action_checkbox': item.classes.append("action-checkbox-column") return item def result_item(self, item, obj, field_name, row): if item.field is None and field_name == u'action_checkbox': item.classes.append("action-checkbox") return item # Media def get_media(self, media): if self.actions and self.admin_view.result_count: media = media + self.vendor('xadmin.plugin.actions.js', 'xadmin.plugins.css') return media # Block Views def block_results_bottom(self, context, nodes): if self.actions and self.admin_view.result_count: nodes.append( loader.render_to_string( 'xadmin/blocks/model_list.results_bottom.actions.html', context=get_context_dict(context))) site.register_plugin(ActionPlugin, ListAdminView)
return self.get(request, form=form) site.register_view(r'^xadmin/password_reset/$', ResetPasswordSendView, name='xadmin_password_reset') class ResetLinkPlugin(BaseAdminPlugin): def block_form_bottom(self, context, nodes): reset_link = self.get_admin_url('xadmin_password_reset') return '<div class="text-info" style="margin-top:15px;"><a href="%s"><i class="fa fa-question-sign"></i> %s</a></div>' % ( reset_link, _('Forgotten your password or username?')) site.register_plugin(ResetLinkPlugin, LoginView) class ResetPasswordComfirmView(BaseAdminView): need_site_permission = False password_reset_set_form = SetPasswordForm password_reset_confirm_template = 'xadmin/auth/password_reset/confirm.html' password_reset_token_generator = default_token_generator def do_view(self, request, uidb36, token, *args, **kwargs): context = super(ResetPasswordComfirmView, self).get_context() return password_reset_confirm( request, uidb36,
site_name = self.admin_site.name if self.global_add_models == None: models = self.admin_site._registry.keys() else: models = self.global_add_models for model in models: app_label = model._meta.app_label if self.has_model_perm(model, "add"): info = (app_label, model._meta.module_name) try: add_models.append({ 'title': _('Add %s') % capfirst(model._meta.verbose_name), 'url': reverse('xadmin:%s_%s_add' % info, current_app=site_name), 'model': model }) except NoReverseMatch: pass nodes.append( loader.render_to_string('xadmin/blocks/comm.top.topnav.html', {'add_models': add_models})) site.register_plugin(TopNavPlugin, CommAdminView)
model, list_per_page=10, list_editable=[])(req) def has_perm(self): return True def context(self, context): list_view = self.list_view list_view.make_result_list() base_fields = list_view.base_list_display if len(base_fields) > 5: base_fields = base_fields[0:5] context['result_headers'] = [ c for c in list_view.result_headers().cells if c.field_name in base_fields ] context['results'] = [[ o for i, o in enumerate( filter(lambda c: c.field_name in base_fields, r.cells)) ] for r in list_view.results()] context['result_count'] = list_view.result_count context['page_url'] = self.bookmark.url site.register(Bookmark, BookmarkAdmin) site.register_plugin(BookmarkPlugin, ListAdminView) site.register_modelview(r'^bookmark/$', BookmarkView, name='%s_%s_bookmark')
class EChartsPlugin(BaseAdminPlugin): turn_on_Echarts = False def init_request(self, *args, **kwargs): return bool(self.turn_on_Echarts) def get_chart_url(self, name, v): return self.admin_view.model_admin_url('chart', name) + self.admin_view.get_query_string() # Media def get_media(self, media): media.add_js(['/media/plugins/echarts/js/echarts.min.js']) return media # Block Views def block_results_top(self, context, nodes): context.update({ 'Echarts_Title': "预测结果", 'Echarts_Data': getEchartsData(), }) nodes.append(loader.render_to_string('plugins/echarts/echarts.html', context=get_context_dict(context))) # 注册插件 site.register_plugin(EChartsPlugin, ModelAdminView)
has_view_perm = model_admin(self.admin_view.request).has_view_permission(rel_obj) except: has_view_perm = self.admin_view.has_model_perm(rel_obj.__class__, 'view') else: has_view_perm = self.admin_view.has_model_perm(rel_obj.__class__, 'view') if rel_obj and has_view_perm: opts = rel_obj._meta try: # /xadmin/zl955/ipapp/5/detail/ item_res_uri = ('%s' % (getattr(rel_obj, 'ip'),)) # item_res_uri = reverse('%s:%s_%s_detail' % (self.admin_site.app_name,opts.app_label, opts.model_name),args=(getattr(rel_obj, opts.pk.attname),)) if item_res_uri: edit_url = '' item.btns.append('<a data-res-uri="%s" class="get-add" rel="tooltip" title="%s"><i class="fa fa-globe" style="font-size: 2rem;"></i></a>' % (item_res_uri, _(u'Details of %s') % str(rel_obj))) except NoReverseMatch: pass return item # Media def get_media(self, media): if self.get_add or self.get_add: media = media + self.vendor('xadmin.plugin.getadd.js', 'xadmin.form.css') return media site.register_plugin(GetAddPlugin, ListAdminView)
description = func.short_description else: description = action return func, action, description, getattr(func, 'icon', 'tasks') def result_header(self, item, field_name, row): if item.attr and field_name == 'action_checkbox': item.classes.append("action-checkbox-column") return item def result_item(self, item, obj, field_name, row): if item.field is None and field_name == u'action_checkbox': item.classes.append("action-checkbox") return item def get_media(self, media): if self.admin_view.result_count: media = media + self.vendor('xadmin.plugin.actions.js', 'xadmin.plugins.css') return media def block_results_bottom(self, context, nodes): if self.admin_view.result_count: _tpl = 'xadmin/blocks/grid.results_bottom.actions.html' if self.admin_view.grid else 'xadmin/blocks/form.results_bottom.actions.html' nodes.append( loader.render_to_string(_tpl, context_instance=context)) site.register_plugin(ActionPlugin, ListAdminView) site.register_plugin(ActionPlugin, GridPage) site.register_plugin(ActionPlugin, UpdateAdminView)
left = self.model._mptt_meta.left_attr return (tree_id, left) def result_item(self, __, obj, field_name, row): is_display = row['is_display_first'] item = __() if is_display and not row['is_display_first']: item.wraps.append(u'%s %%s' % ('---' * obj.get_level())) return item # Media def get_media(self, media): #media.add_css({'screen': [self.static('xadmin/css/aggregation.css'),]}) return media site.register_plugin(MPTTListPlugin, ListAdminView) class MPTTFormPlugin(BaseAdminPlugin): def init_request(self, *args, **kwargs): result = self.model and issubclass(self.model, MPTTModel) if result: self.admin_view.form = MPTTAdminForm return result def get_field_attrs(self, attrs, db_field, **kwargs): from mptt.models import MPTTModel, TreeForeignKey if db_field.rel and issubclass(db_field.rel.to, MPTTModel) \ and not isinstance(db_field, TreeForeignKey) \ and not db_field.name in self.raw_id_fields: attrs.update(dict(form_class=TreeNodeChoiceField, queryset=db_field.rel.to.objects.all(), required=False))
def value_from_datadict(self, data, files, name): return self.widget.value_from_datadict(data, files, name) def _has_changed(self, initial, data): return self.widget._has_changed(initial, data) def id_for_label(self, id_): return self.widget.id_for_label(id_) class QuickAddBtnPlugin(BaseAdminPlugin): def init_request(self, *args, **kwargs): return not self.request.is_ajax() def formfield_for_dbfield(self, formfield, db_field, **kwargs): if formfield and self.model in self.admin_site._registry and isinstance( db_field, (models.ForeignKey, models.ManyToManyField)): rel_model = get_model_from_relation(db_field) if rel_model in self.admin_site._registry and self.has_model_perm( rel_model, 'add'): add_url = self.get_model_url(rel_model, 'add') formfield.widget = RelatedFieldWidgetWrapper( formfield.widget, db_field.rel, add_url, self.get_model_url(self.model, 'add')) return formfield site.register_plugin(QuickFormPlugin, ModelFormAdminView) site.register_plugin(QuickAddBtnPlugin, ModelFormAdminView)
def get_field_attrs(self, __, db_field, **kwargs): if not self.user.is_superuser: if self.user_fields and db_field.name in self.user_fields: return {'widget': forms.HiddenInput} return __() def get_form_datas(self, datas): if not self.user.is_superuser: if self.user_fields and 'data' in datas: if hasattr(datas['data'],'_mutable') and not datas['data']._mutable: datas['data'] = datas['data'].copy() for f in self.user_fields: datas['data'][f] = self.user.pk return datas site.register_plugin(UserFieldPlugin, ModelFormAdminView) class ProyectoFieldPlugin(BaseAdminPlugin): proyecto_fields = [] def get_field_attrs(self, __, db_field, **kwargs): if not self.user.is_superuser: #if not self.user.es_empleado(): #esto no está del todo bien, pero bueno. es para evitaar if self.proyecto_fields and db_field.name in self.proyecto_fields: return {'widget': forms.HiddenInput} return __() def get_form_datas(self, datas): if not self.user.is_superuser:
nodes.append(render_to_string('xadmin/blocks/model_list.grid_left.filters.html', context_instance=context)) def block_grid_top(self, context, nodes): if self.has_filters and self.filter_list_position: nodes.append(render_to_string('xadmin/blocks/model_list.grid_top.filters.html', context_instance=context)) def block_nav_form(self, context, nodes): if self.search_fields: context.update({'search_var': SEARCH_VAR, 'remove_search_url': self.admin_view.get_query_string(remove=[SEARCH_VAR]), 'search_form_params': self.admin_view.get_form_params(remove=[SEARCH_VAR,'p'])}) nodes.append( render_to_string( 'xadmin/blocks/model_list.nav_form.search_form.html', context_instance=context)) site.register_plugin(FilterPlugin, ListAdminView) site.register_plugin(FilterPlugin, GridPage) # @filter_manager.register class QuickFilterMultiSelectFieldListFilter(MultiSelectFieldListFilter): """ Delegates the filter to the default filter and ors the results of each Lists the distinct values of each field as a checkbox Uses the default spec for each """ template = 'xadmin/filters/quickfilter.html' class QuickFilterPlugin(BasePlugin): """ Add a filter menu to the left column of the page
class RefreshPlugin(BaseAdminPlugin): refresh_times = [] # Media def get_media(self, media): if self.refresh_times and self.request.GET.get(REFRESH_VAR): media = media + self.vendor('xadmin.plugin.refresh.js') return media # Block Views def block_top_toolbar(self, context, nodes): if self.refresh_times: current_refresh = self.request.GET.get(REFRESH_VAR) context.update({ 'has_refresh': bool(current_refresh), 'clean_refresh_url': self.admin_view.get_query_string(remove=(REFRESH_VAR,)), 'current_refresh': current_refresh, 'refresh_times': [{ 'time': r, 'url': self.admin_view.get_query_string({REFRESH_VAR: r}), 'selected': str(r) == current_refresh, } for r in self.refresh_times], }) nodes.append(loader.render_to_string('xadmin/blocks/model_list.top_toolbar.refresh.html', get_context_dict(context))) site.register_plugin(RefreshPlugin, ListAdminView)
media = media + self.vendor('xadmin.plugin.refresh.js') return media # Block Views def block_top_toolbar(self, context, nodes): if self.refresh_times: current_refresh = self.request.GET.get(REFRESH_VAR) context.update({ 'has_refresh': bool(current_refresh), 'clean_refresh_url': self.admin_view.get_query_string(remove=(REFRESH_VAR, )), 'current_refresh': current_refresh, 'refresh_times': [{ 'time': r, 'url': self.admin_view.get_query_string({REFRESH_VAR: r}), 'selected': str(r) == current_refresh, } for r in self.refresh_times], }) nodes.append( loader.render_to_string( 'xadmin/blocks/model_list.top_toolbar.refresh.html', get_context_dict(context))) site.register_plugin(RefreshPlugin, ListAdminView)
nodes.append(loader.render_to_string('xadmin/blocks/comm.top.topnav.html', {'search_models': search_models, 'search_name': SEARCH_VAR})) def block_top_navmenu(self, context, nodes): add_models = [] site_name = self.admin_site.name if self.global_add_models == None: models = self.admin_site._registry.keys() else: models = self.global_add_models for model in models: app_label = model._meta.app_label if self.has_model_perm(model, "add"): info = (app_label, model._meta.module_name) try: add_models.append({ 'title': _('Add %s') % capfirst(model._meta.verbose_name), 'url': reverse('xadmin:%s_%s_add' % info, current_app=site_name), 'model': model }) except NoReverseMatch: pass nodes.append( loader.render_to_string('xadmin/blocks/comm.top.topnav.html', {'add_models': add_models})) site.register_plugin(TopNavPlugin, CommAdminView)
if self.global_add_models == None: models = self.admin_site._registry.keys() else: models = self.global_add_models for model in models: app_label = model._meta.app_label if self.has_model_perm(model, "add"): info = (app_label, model._meta.module_name) try: add_models.append({ 'title': _('Add %s') % capfirst(model._meta.verbose_name), 'url': reverse('xadmin:%s_%s_add' % info, current_app=site_name), 'model': model }) except NoReverseMatch: pass nodes.append( loader.render_to_string('xadmin/blocks/comm.top.topnav.html', { 'add_models': add_models, 'head_fix': self.admin_site.head_fix })) site.register_plugin(TopNavPlugin, SiteView)
return __() return _method def do_action(self, __, queryset): return self.revision_context_manager.create_revision(manage_manually=False)(self.do_action_func(__))() class ReversionAdmin(object): model_icon = "exchange" class VersionAdmin(object): model_icon = "file" site.register(Revision, ReversionAdmin) site.register(Version, VersionAdmin) site.register_modelview(r"^recover/$", RecoverListView, name="%s_%s_recoverlist") site.register_modelview(r"^recover/([^/]+)/$", RecoverView, name="%s_%s_recover") site.register_modelview(r"^([^/]+)/revision/$", RevisionListView, name="%s_%s_revisionlist") site.register_modelview(r"^([^/]+)/revision/([^/]+)/$", RevisionView, name="%s_%s_revision") site.register_plugin(ReversionPlugin, ListAdminView) site.register_plugin(ReversionPlugin, ModelFormAdminView) site.register_plugin(ReversionPlugin, DeleteAdminView) site.register_plugin(InlineRevisionPlugin, InlineModelAdmin) site.register_plugin(ActionRevisionPlugin, BaseActionView)
media = media + self.vendor('select.js', 'select.css', 'xadmin.widget.select.js') return media + self.vendor('xadmin.plugin.filters.js') # Block Views def block_nav_menu(self, context, nodes): if self.has_filters: nodes.append( loader.render_to_string( 'xadmin/blocks/model_list.nav_menu.filters.html', context=get_context_dict(context))) def block_nav_form(self, context, nodes): if self.search_fields: context = get_context_dict(context or {}) # no error! context.update({ 'search_var': SEARCH_VAR, 'remove_search_url': self.admin_view.get_query_string(remove=[SEARCH_VAR]), 'search_form_params': self.admin_view.get_form_params(remove=[SEARCH_VAR]) }) nodes.append( loader.render_to_string( 'xadmin/blocks/model_list.nav_form.search_form.html', context=context)) site.register_plugin(FilterPlugin, ListAdminView)
has_view_perm = self.admin_view.has_model_perm(rel_obj.__class__, 'view') has_change_perm = self.has_model_perm(rel_obj.__class__, 'change') if rel_obj and has_view_perm: opts = rel_obj._meta try: item_res_uri = reverse( '%s:%s_%s_detail' % (self.admin_site.app_name, opts.app_label, opts.module_name), args=(getattr(rel_obj, opts.pk.attname),)) if item_res_uri: if has_change_perm: edit_url = reverse( '%s:%s_%s_change' % (self.admin_site.app_name, opts.app_label, opts.module_name), args=(getattr(rel_obj, opts.pk.attname),)) else: edit_url = '' item.btns.append('<a data-res-uri="%s" data-edit-uri="%s" class="details-handler" rel="tooltip" title="%s"><i class="fa fa-info-circle"></i></a>' % (item_res_uri, edit_url, _(u'Details of %s') % str(rel_obj))) except NoReverseMatch: pass return item # Media def get_media(self, media): if self.show_all_rel_details or self.show_detail_fields: media = media + self.vendor('xadmin.plugin.details.js', 'xadmin.form.css') return media site.register_plugin(DetailsPlugin, ListAdminView)
if isinstance(response, cls_str) and response != self.get_admin_url('index'): return self._get_url(response) return response def get_context(self, context): if 'delete_url' in context: context['delete_url'] = self._get_url(context['delete_url']) return context def block_after_fieldsets(self, context, nodes): return self._get_input() class DeleteRelateDisplayPlugin(BaseRelateDisplayPlugin): def post_response(self, response): cls_str = str if six.PY3 else basestring if isinstance(response, cls_str) and response != self.get_admin_url('index'): return self._get_url(response) return response def block_form_fields(self, context, nodes): return self._get_input() site.register_plugin(RelateMenuPlugin, ListAdminView) site.register_plugin(ListRelateDisplayPlugin, ListAdminView) site.register_plugin(EditRelateDisplayPlugin, CreateAdminView) site.register_plugin(EditRelateDisplayPlugin, UpdateAdminView) site.register_plugin(DeleteRelateDisplayPlugin, DeleteAdminView)
if form.is_valid(): result['result'] = 'success' else: result['result'] = 'error' result['errors'] = JsonErrorDict(form.errors, form).as_json() return self.render_response(result) class AjaxDetailPlugin(BaseAjaxPlugin): def get_response(self, __): if self.request.GET.get('_format') == 'html': self.admin_view.detail_template = 'xadmin/views/quick_detail.html' return __() form = self.admin_view.form_obj layout = form.helper.layout results = [] for p, f in layout.get_field_names(): result = self.admin_view.get_field_result(f) results.append((result.label, result.val)) return self.render_response(SortedDict(results)) site.register_plugin(AjaxListPlugin, ListAdminView) site.register_plugin(AjaxFormPlugin, ModelFormAdminView) site.register_plugin(AjaxDetailPlugin, DetailAdminView)
#coding:utf-8 from django.conf import settings from django.template import loader from django.views.i18n import set_language from xadmin.plugins.utils import get_context_dict from xadmin.sites import site from xadmin.views import BaseAdminPlugin, CommAdminView, BaseAdminView class SetLangNavPlugin(BaseAdminPlugin): def block_top_navmenu(self, context, nodes): context = get_context_dict(context) context['redirect_to'] = self.request.get_full_path() nodes.append( loader.render_to_string('xadmin/blocks/comm.top.setlang.html', context=context)) class SetLangView(BaseAdminView): def post(self, request, *args, **kwargs): if 'nav_menu' in request.session: del request.session['nav_menu'] return set_language(request) if settings.LANGUAGES and 'django.middleware.locale.LocaleMiddleware' in settings.MIDDLEWARE_CLASSES: site.register_plugin(SetLangNavPlugin, CommAdminView) site.register_view(r'^i18n/setlang/$', SetLangView, 'set_language')
else: description = capfirst(action.replace('_', ' ')) return func, action, description, getattr(func, 'icon', 'tasks') # View Methods def result_header(self, item, field_name, row): if item.attr and field_name == 'action_checkbox': item.classes.append("action-checkbox-column") return item def result_item(self, item, obj, field_name, row): if item.field is None and field_name == u'action_checkbox': item.classes.append("action-checkbox") return item # Media def get_media(self, media): if self.actions and self.admin_view.result_count: media = media + self.vendor('xadmin.plugin.actions.js', 'xadmin.plugins.css') return media # Block Views def block_results_bottom(self, context, nodes): if self.actions and self.admin_view.result_count: nodes.append(loader.render_to_string('xadmin/blocks/model_list.results_bottom.actions.html', context=get_context_dict(context))) site.register_plugin(ActionPlugin, ListAdminView)
@transaction.atomic def post(self, request, object_id): model_fields = [f.name for f in self.opts.fields] fields = [f for f in request.POST.keys() if f in model_fields] defaults = { "form": self.form, "fields": fields, "formfield_callback": self.formfield_for_dbfield, } form_class = modelform_factory(self.model, **defaults) form = form_class(instance=self.org_obj, data=request.POST, files=request.FILES) result = {} if form.is_valid(): form.save(commit=True) result['result'] = 'success' result['new_data'] = form.cleaned_data result['new_html'] = dict([(f, self.get_new_field_html(f)) for f in fields]) else: result['result'] = 'error' result['errors'] = JsonErrorDict(form.errors, form).as_json() return self.render_response(result) site.register_plugin(EditablePlugin, ListAdminView) site.register_modelview(r'^(.+)/patch/$', EditPatchView, name='%s_%s_patch')
user_fields = [] def get_field_attrs(self, __, db_field, **kwargs): if self.user_fields and db_field.name in self.user_fields: return {'widget': forms.HiddenInput} return __() def get_form_datas(self, datas): if self.user_fields and 'data' in datas: if hasattr(datas['data'],'_mutable') and not datas['data']._mutable: datas['data'] = datas['data'].copy() for f in self.user_fields: datas['data'][f] = self.user.id return datas site.register_plugin(UserFieldPlugin, ModelFormAdminView) class ModelPermissionPlugin(BasePlugin): user_can_access_owned_objects_only = False user_owned_objects_field = 'user' def queryset(self, qs): if self.user_can_access_owned_objects_only and \ not self.user.is_superuser: filters = {self.user_owned_objects_field: self.user} qs = qs.filter(**filters) return qs
}, 'grid': { 'hoverable': True, 'clickable': True } } try: xfield = self.opts.get_field(self.x_field) if type(xfield) in (models.DateTimeField, models.DateField, models.TimeField): option['xaxis'] = {'mode': "time", 'tickLength': 5} if type(xfield) is models.DateField: option['xaxis']['timeformat'] = "%y/%m/%d" elif type(xfield) is models.TimeField: option['xaxis']['timeformat'] = "%H:%M:%S" else: option['xaxis']['timeformat'] = "%y/%m/%d %H:%M:%S" except Exception: pass option.update(self.chart.get('option', {})) content = {'data': datas, 'option': option} result = json.dumps(content, cls=JSONEncoder, ensure_ascii=False) return HttpResponse(result) site.register_plugin(ChartsPlugin, ListAdminView) site.register_modelview(r'^chart/(.+)/$', ChartsView, name='%s_%s_chart')
nodes.append(loader.render_to_string('xadmin/blocks/comm.top.topnav.html', {'search_models': search_models, 'search_name': SEARCH_VAR})) def block_top_navmenu(self, context, nodes): add_models = [] site_name = self.admin_site.name if self.global_add_models == None: models = self.admin_site._registry.keys() else: models = self.global_add_models for model in models: app_label = model._meta.app_label if self.has_model_perm(model, "add"): info = (app_label, model._meta.module_name) try: add_models.append({ 'title': _('Add %s') % capfirst(model._meta.verbose_name), 'url': reverse('xadmin:%s_%s_add' % info, current_app=site_name), 'model': model }) except NoReverseMatch: pass nodes.append( loader.render_to_string('xadmin/blocks/comm.top.topnav.html', {'add_models': add_models})) site.register_plugin(TopNavPlugin, SiteView)
def build_attrs(self, attrs={}, **kwargs): attrs = super(ForeignKeySelectWidget, self).build_attrs(attrs, **kwargs) if "class" not in attrs: attrs['class'] = 'select-preload' else: attrs['class'] = attrs['class'] + ' select-preload' attrs['data-placeholder'] = _( 'Select %s') % self.rel.to._meta.verbose_name return attrs class RelateFieldPlugin(BaseAdminPlugin): def get_field_style(self, attrs, db_field, style, **kwargs): # search able fk field if style in ('fk-ajax', 'fk-select') and isinstance( db_field, models.ForeignKey): if (db_field.remote_field.to in self.admin_view.admin_site._registry) and \ self.has_model_perm(db_field.remote_field.to, 'view'): db = kwargs.get('using') return dict( attrs or {}, widget=(style == 'fk-ajax' and ForeignKeySearchWidget or ForeignKeySelectWidget)(db_field.remote_field, self.admin_view, using=db)) return attrs site.register_plugin(RelateFieldPlugin, ModelFormAdminView)
class UserFieldPlugin(BaseAdminPlugin): user_fields = [] def get_field_attrs(self, __, db_field, **kwargs): if self.user_fields and db_field.name in self.user_fields: return {'widget': forms.HiddenInput} return __() def get_form_datas(self, datas): if self.user_fields and 'data' in datas: for f in self.user_fields: datas['data'][f] = self.user.id return datas site.register_plugin(UserFieldPlugin, ModelFormAdminView) class ModelPermissionPlugin(BaseAdminPlugin): user_can_access_owned_objects_only = False user_owned_objects_field = 'user' def queryset(self, qs): if self.user_can_access_owned_objects_only and \ not self.user.is_superuser: filters = {self.user_owned_objects_field: self.user} qs = qs.filter(**filters) return qs
def block_extrabody(self, context, node): if self.include_image: return get_gallery_modal() class ModelListPlugin(BaseAdminPlugin): list_gallery = False def init_request(self, *args, **kwargs): return bool(self.list_gallery) # Media def get_media(self, media): return media + self.vendor('image-gallery.js', 'image-gallery.css') def block_results_top(self, context, node): return '<div id="gallery" data-toggle="modal-gallery" data-target="#modal-gallery">' def block_results_bottom(self, context, node): return "</div>" def block_extrabody(self, context, node): return get_gallery_modal() site.register_plugin(ModelDetailPlugin, DetailAdminView) site.register_plugin(ModelDetailPlugin, ModelFormAdminView) site.register_plugin(ModelListPlugin, ListAdminView)
form.save(**opts) context = super(ResetPasswordSendView, self).get_context() return TemplateResponse(request, self.password_reset_done_template, context, current_app=self.admin_site.name) else: return self.get(request, form=form) site.register_view(r'^xadmin/password_reset/$', ResetPasswordSendView, name='xadmin_password_reset') class ResetLinkPlugin(BasePlugin): def block_form_bottom(self, context, nodes): reset_link = self.get_admin_url('xadmin_password_reset') return '<div class="text-info" style="margin-top:15px;"><a href="%s"><i class="fa fa-question-sign"></i> %s</a></div>' % (reset_link, _('Forgotten your password or username?')) site.register_plugin(ResetLinkPlugin, LoginView) class ResetPasswordComfirmView(BaseView): need_site_permission = False password_reset_set_form = SetPasswordForm password_reset_confirm_template = 'xadmin/auth/password_reset/confirm.html' password_reset_token_generator = default_token_generator def do_view(self, request, uidb36, token, *args, **kwargs): context = super(ResetPasswordComfirmView, self).get_context() return password_reset_confirm(request, uidb36, token, template_name=self.password_reset_confirm_template, token_generator=self.password_reset_token_generator,
formset = inline.instance_form(extra=0, max_num=0, can_delete=0) formset.detail_page = True if True: replace_field_to_value(formset.helper.layout, inline) model = inline.model opts = model._meta fake_admin_class = type(str('%s%sFakeAdmin' % (opts.app_label, opts.model_name)), (object, ), {'model': model}) for form in formset.forms: instance = form.instance if instance.pk: form.detail = self.get_view( DetailAdminUtil, fake_admin_class, instance) return formset class DetailAdminUtil(DetailAdminView): def init_request(self, obj): self.obj = obj self.org_obj = obj class DetailInlineFormsetPlugin(InlineFormsetPlugin): def get_model_form(self, form, **kwargs): self.formsets = [self._get_detail_formset_instance( inline) for inline in self.inline_instances] return form site.register_plugin(InlineFormsetPlugin, ModelFormAdminView) site.register_plugin(DetailInlineFormsetPlugin, DetailAdminView)
def init_request(self, *args, **kwargs): return hasattr(self.admin_view, 'list_header_name_dict') def result_header(self, item, field_name, row): if field_name in self.admin_view.list_header_name_dict: item.text = self.admin_view.list_header_name_dict[field_name] return item ############################################################################################ # 注册插件 site.register_plugin(CreateAdminViewFormPlugin, CreateAdminView) site.register_plugin(CreateAdminViewFormLayoutPlugin, CreateAdminView) site.register_plugin(UpdateAdminViewFormPlugin, UpdateAdminView) site.register_plugin(UpdateAdminViewFormLayoutPlugin, UpdateAdminView) site.register_plugin(ListAdminViewQueryFormPlugin, ListAdminView) site.register_plugin(CustomPaginationPlugin, ListAdminView) site.register_plugin(ListHeaderNamePlugin, ListAdminView) site.register_plugin(ExtraFormPlugin, ModelFormAdminView) site.register_plugin(TitlePlugin, ModelAdminView)
from xadmin.sites import site from xadmin.views import BaseAdminPlugin, CommAdminView BUILDIN_STYLES = { 'default': 'xadmin/includes/sitemenu_default.html', 'accordion': 'xadmin/includes/sitemenu_accordion.html', } class SiteMenuStylePlugin(BaseAdminPlugin): menu_style = None def init_request(self, *args, **kwargs): return bool(self.menu_style) and self.menu_style in BUILDIN_STYLES def get_context(self, context): context['menu_template'] = BUILDIN_STYLES[self.menu_style] return context site.register_plugin(SiteMenuStylePlugin, CommAdminView)
return form_list.keyOrder[key] return None def get_step_index(self, step=None): """ Returns the index for the given `step` name. If no step is given, the current step will be used to get the index. """ if step is None: step = self.steps.current return self.get_form_list().keyOrder.index(step) def block_before_fieldsets(self, context, nodes): context.update(dict(self.storage.extra_data)) context['wizard'] = { 'steps': self.steps, 'management_form': ManagementForm(prefix=self.prefix, initial={ 'current_step': self.steps.current, }), } nodes.append(loader.render_to_string('xadmin/blocks/model_form.before_fieldsets.wizard.html', context_instance=context)) def block_submit_line(self, context, nodes): context.update(dict(self.storage.extra_data)) context['wizard'] = { 'steps': self.steps } nodes.append(loader.render_to_string('xadmin/blocks/model_form.submit_line.wizard.html', context_instance=context)) site.register_plugin(WizardFormPlugin, ModelFormAdminView)
"http://bootswatch.com/api/3.json", 'GET', '', headers={ "Accept": "application/json", "User-Agent": self.request.META['HTTP_USER_AGENT'] }) if six.PY3: content = content.decode() watch_themes = json.loads(content)['themes'] ex_themes.extend([{ 'name': t['name'], 'description': t['description'], 'css': t['cssMin'], 'thumbnail': t['thumbnail'] } for t in watch_themes]) except Exception as e: print(e) cache.set(THEME_CACHE_KEY, json.dumps(ex_themes), 24 * 3600) themes.extend(ex_themes) nodes.append( loader.render_to_string('xadmin/blocks/comm.top.theme.html', { 'themes': themes, 'select_css': select_css })) site.register_plugin(ThemePlugin, BaseAdminView)
from django.conf import settings from django.template import loader from django.views.i18n import set_language from xadmin.plugins.utils import get_context_dict from xadmin.sites import site from xadmin.views import BaseAdminPlugin, CommAdminView, BaseAdminView class SetLangNavPlugin(BaseAdminPlugin): def block_top_navmenu(self, context, nodes): context = get_context_dict(context) context['redirect_to'] = self.request.get_full_path() nodes.append(loader.render_to_string('xadmin/blocks/comm.top.setlang.html', context=context)) class SetLangView(BaseAdminView): def post(self, request, *args, **kwargs): if 'nav_menu' in request.session: del request.session['nav_menu'] return set_language(request) if settings.LANGUAGES and 'django.middleware.locale.LocaleMiddleware' in settings.MIDDLEWARE: site.register_plugin(SetLangNavPlugin, CommAdminView) site.register_view(r'^i18n/setlang/$', SetLangView, 'set_language')
if step is None: step = self.steps.current return self.get_form_list().keyOrder.index(step) def block_before_fieldsets(self, context, nodes): context.update(dict(self.storage.extra_data)) context['wizard'] = { 'steps': self.steps, 'management_form': ManagementForm(prefix=self.prefix, initial={ 'current_step': self.steps.current, }), } nodes.append( loader.render_to_string( 'xadmin/blocks/model_form.before_fieldsets.wizard.html', context_instance=context)) def block_submit_line(self, context, nodes): context.update(dict(self.storage.extra_data)) context['wizard'] = {'steps': self.steps} nodes.append( loader.render_to_string( 'xadmin/blocks/model_form.submit_line.wizard.html', context_instance=context)) site.register_plugin(WizardFormPlugin, ModelFormAdminView)
def post_response(self, response): if isinstance(response, str) and response != self.get_admin_url('index'): return self._get_url(response) return response def get_context(self, context): if 'delete_url' in context: context['delete_url'] = self._get_url(context['delete_url']) return context def block_after_fieldsets(self, context, nodes): return self._get_input() class DeleteRelateDisplayPlugin(BaseRelateDisplayPlugin): def post_response(self, response): if isinstance(response, str) and response != self.get_admin_url('index'): return self._get_url(response) return response def block_form_fields(self, context, nodes): return self._get_input() site.register_plugin(RelateMenuPlugin, ListAdminView) site.register_plugin(ListRelateDisplayPlugin, ListAdminView) site.register_plugin(EditRelateDisplayPlugin, CreateAdminView) site.register_plugin(EditRelateDisplayPlugin, UpdateAdminView) site.register_plugin(DeleteRelateDisplayPlugin, DeleteAdminView)
model_icon = 'fa fa-exchange' list_display = ('__str__', 'date_created', 'user', 'comment') list_display_links = ('__str__', ) list_filter = ('date_created', 'user') inlines = [VersionInline] site.register(Revision, ReversionAdmin) site.register_modelview(r'^recover/$', RecoverListView, name='%s_%s_recoverlist') site.register_modelview(r'^recover/([^/]+)/$', RecoverView, name='%s_%s_recover') site.register_modelview(r'^([^/]+)/revision/$', RevisionListView, name='%s_%s_revisionlist') site.register_modelview(r'^([^/]+)/revision/([^/]+)/$', RevisionView, name='%s_%s_revision') site.register_plugin(ReversionPlugin, ListAdminView) site.register_plugin(ReversionPlugin, ModelFormAdminView) site.register_plugin(ReversionPlugin, DeleteAdminView) site.register_plugin(InlineRevisionPlugin, InlineModelAdmin) site.register_plugin(ActionRevisionPlugin, BaseActionView)
for obj in self.result_list: xf, attrs, value = lookup_field(self.x_field, obj, self) for i, yfname in enumerate(self.y_fields): yf, yattrs, yv = lookup_field(yfname, obj, self) datas[i]["data"].append((value, yv)) option = {'series': {'lines': {'show': True}, 'points': {'show': False}}, 'grid': {'hoverable': True, 'clickable': True}} try: xfield = self.opts.get_field(self.x_field) if type(xfield) in (models.DateTimeField, models.DateField, models.TimeField): option['xaxis'] = {'mode': "time", 'tickLength': 5} if type(xfield) is models.DateField: option['xaxis']['timeformat'] = "%y/%m/%d" elif type(xfield) is models.TimeField: option['xaxis']['timeformat'] = "%H:%M:%S" else: option['xaxis']['timeformat'] = "%y/%m/%d %H:%M:%S" except Exception: pass option.update(self.chart.get('option', {})) content = {'data': datas, 'option': option} result = json.dumps(content, cls=JSONEncoder, ensure_ascii=False) return HttpResponse(result) site.register_plugin(ChartsPlugin, ListAdminView) site.register_modelview(r'^chart/(.+)/$', ChartsView, name='%s_%s_chart')
response = HttpResponse(content_type="%s; charset=UTF-8" % self.export_mimes[file_type]) file_name = self.opts.verbose_name.replace(' ', '_') response['Content-Disposition'] = ( 'attachment; filename=%s.%s' % (file_name, file_type)).encode('utf-8') response.write(getattr(self, 'get_%s_export' % file_type)(context)) return response # View Methods def get_result_list(self, __): if self.request.GET.get('all', 'off') == 'on': self.admin_view.list_per_page = sys.maxsize return __() def result_header(self, item, field_name, row): item.export = not item.attr or field_name == '__str__' or getattr( item.attr, 'allow_export', True) return item def result_item(self, item, obj, field_name, row): item.export = item.field or field_name == '__str__' or getattr( item.attr, 'allow_export', True) return item site.register_plugin(ExportMenuPlugin, ListAdminView) site.register_plugin(ExportPlugin, ListAdminView)
if not self.title: self.title = unicode(bookmark) req = self.make_get_request("", data.items()) self.list_view = self.get_view_class( ListAdminView, model, list_per_page=10, list_editable=[])(req) def has_perm(self): return True def context(self, context): list_view = self.list_view list_view.make_result_list() base_fields = list_view.base_list_display if len(base_fields) > 5: base_fields = base_fields[0:5] context['result_headers'] = [c for c in list_view.result_headers( ).cells if c.field_name in base_fields] context['results'] = [[o for i, o in enumerate(filter(lambda c:c.field_name in base_fields, r.cells))] for r in list_view.results()] context['result_count'] = list_view.result_count context['page_url'] = self.bookmark.url site.register(Bookmark, BookmarkAdmin) site.register_plugin(BookmarkPlugin, ListAdminView) site.register_modelview(r'^bookmark/$', BookmarkView, name='%s_%s_bookmark')
def get_field_attrs(self, __, db_field, **kwargs): if self.user_fields and db_field.name in self.user_fields: return {'widget': forms.HiddenInput} return __() def get_form_datas(self, datas): if self.user_fields and 'data' in datas: if hasattr(datas['data'], '_mutable') and not datas['data']._mutable: datas['data'] = datas['data'].copy() for f in self.user_fields: datas['data'][f] = self.user.id return datas site.register_plugin(UserFieldPlugin, ModelFormAdminView) class ModelPermissionPlugin(BaseAdminPlugin): user_can_access_owned_objects_only = False user_owned_objects_field = 'user' def queryset(self, qs): if self.user_can_access_owned_objects_only and \ not self.user.is_superuser: filters = {self.user_owned_objects_field: self.user} qs = qs.filter(**filters) return qs def get_list_display(self, list_display):
attrs['data-label'] = self.label_for_value(value) return super(ForeignKeySearchWidget, self).render(name, value, attrs) def label_for_value(self, value): key = self.rel.get_related_field().name try: obj = self.rel.to._default_manager.using( self.db).get(**{key: value}) return '%s' % escape(Truncator(obj).words(14, truncate='...')) except (ValueError, self.rel.to.DoesNotExist): return "" @property def media(self): return vendor('select.js', 'select.css', 'xadmin.widget.select.js') class RelateFieldPlugin(BaseAdminPlugin): def get_field_style(self, attrs, db_field, style, **kwargs): # search able fk field if style == 'fk-ajax' and isinstance(db_field, models.ForeignKey): if (db_field.rel.to in self.admin_view.admin_site._registry) and \ self.has_model_perm(db_field.rel.to, 'view'): db = kwargs.get('using') return dict(attrs or {}, widget=ForeignKeySearchWidget(db_field.rel, self.admin_view, using=db)) return attrs site.register_plugin(RelateFieldPlugin, ModelFormAdminView)
if rel_obj and has_view_perm: opts = rel_obj._meta try: item_res_uri = reverse( '%s:%s_%s_detail' % (self.admin_site.app_name, opts.app_label, opts.model_name), args=(getattr(rel_obj, opts.pk.attname),)) if item_res_uri: if has_change_perm: edit_url = reverse( '%s:%s_%s_change' % (self.admin_site.app_name, opts.app_label, opts.model_name), args=(getattr(rel_obj, opts.pk.attname),)) else: edit_url = '' item.btns.append( '<a data-res-uri="%s" data-edit-uri="%s" class="details-handler" rel="tooltip" title="%s"><i class="fa fa-info-circle"></i></a>' % (item_res_uri, edit_url, _(u'Details of %s') % str(rel_obj))) except NoReverseMatch: pass return item # Media def get_media(self, media): if self.show_all_rel_details or self.show_detail_fields: media = media + self.vendor('xadmin.plugin.details.js', 'xadmin.form.css') return media site.register_plugin(DetailsPlugin, ListAdminView)
formset = inline.instance_form(extra=0, max_num=0, can_delete=0) formset.detail_page = True if True: replace_field_to_value(formset.helper.layout, inline) model = inline.model opts = model._meta fake_admin_class = type(str('%s%sFakeAdmin' % (opts.app_label, opts.module_name)), (object, ), {'model': model}) for form in formset.forms: instance = form.instance if instance.pk: form.detail = self.get_view( DetailAdminUtil, fake_admin_class, instance) return formset class DetailAdminUtil(DetailAdminView): def init_request(self, obj): self.obj = obj self.org_obj = obj class DetailInlineFormsetPlugin(InlineFormsetPlugin): def get_model_form(self, form, **kwargs): self.formsets = [self._get_detail_formset_instance( inline) for inline in self.inline_instances] return form site.register_plugin(InlineFormsetPlugin, ModelFormAdminView) site.register_plugin(DetailInlineFormsetPlugin, DetailAdminView)
# -*- coding: utf-8 -*- from xadmin.sites import site from xadmin.views import BaseAdminPlugin, CommAdminView class MobilePlugin(BaseAdminPlugin): def _test_mobile(self): try: return self.request.META['HTTP_USER_AGENT'].find('Android') >= 0 or \ self.request.META['HTTP_USER_AGENT'].find('iPhone') >= 0 except Exception: return False def init_request(self, *args, **kwargs): return self._test_mobile() def get_context(self, context): #context['base_template'] = 'xadmin/base_mobile.html' context['is_mob'] = True return context # Media # def get_media(self, media): # return media + self.vendor('xadmin.mobile.css', ) def block_extrahead(self, context, nodes): nodes.append('<script>window.__admin_ismobile__ = true;</script>') site.register_plugin(MobilePlugin, CommAdminView)
return mark_safe(u''.join(output)) def build_attrs(self, extra_attrs=None, **kwargs): "Helper function for building an attribute dictionary." self.attrs = self.widget.build_attrs(extra_attrs=None, **kwargs) return self.attrs def value_from_datadict(self, data, files, name): return self.widget.value_from_datadict(data, files, name) def _has_changed(self, initial, data): return self.widget._has_changed(initial, data) def id_for_label(self, id_): return self.widget.id_for_label(id_) class QuickAddBtnPlugin(BaseAdminPlugin): def formfield_for_dbfield(self, formfield, db_field, **kwargs): if formfield and self.model in self.admin_site._registry and isinstance(db_field, (models.ForeignKey, models.ManyToManyField)): rel_model = get_model_from_relation(db_field) if rel_model in self.admin_site._registry and self.has_model_perm(rel_model, 'add'): add_url = self.get_model_url(rel_model, 'add') formfield.widget = RelatedFieldWidgetWrapper( formfield.widget, db_field.rel, add_url, self.get_model_url(self.model, 'add')) return formfield site.register_plugin(QuickFormPlugin, ModelFormAdminView) site.register_plugin(QuickAddBtnPlugin, ModelFormAdminView)
if form.is_valid(): result['result'] = 'success' else: result['result'] = 'error' result['errors'] = JsonErrorDict(form.errors, form).as_json() return self.render_response(result) class AjaxDetailPlugin(BaseAjaxPlugin): def get_response(self, __): if self.request.GET.get('_format') == 'html': self.admin_view.detail_template = 'xadmin/views/quick_detail.html' return __() form = self.admin_view.form_obj layout = form.helper.layout results = [] for p, f in layout.get_field_names(): result = self.admin_view.get_field_result(f) results.append((result.label, result.val)) return self.render_response(OrderedDict(results)) site.register_plugin(AjaxListPlugin, ListAdminView) site.register_plugin(AjaxFormPlugin, ModelFormAdminView) site.register_plugin(AjaxDetailPlugin, DetailAdminView)
def get_response(self, response, context, *args, **kwargs): file_type = self.request.GET.get('export_type', 'csv') response = HttpResponse( content_type="%s; charset=UTF-8" % self.export_mimes[file_type]) file_name = self.opts.verbose_name.replace(' ', '_') response['Content-Disposition'] = ('attachment; filename=%s.%s' % ( file_name, file_type)).encode('utf-8') response.write(getattr(self, 'get_%s_export' % file_type)(context)) return response # View Methods def get_result_list(self, __): if self.request.GET.get('all', 'off') == 'on': self.admin_view.list_per_page = sys.maxint return __() def result_header(self, item, field_name, row): item.export = not item.attr or field_name == '__str__' or getattr(item.attr, 'allow_export', True) return item def result_item(self, item, obj, field_name, row): item.export = item.field or field_name == '__str__' or getattr(item.attr, 'allow_export', True) return item site.register_plugin(ExportMenuPlugin, ListAdminView) site.register_plugin(ExportPlugin, ListAdminView)
# Block Views def block_nav_menu(self, context, nodes): if self.has_filters: nodes.append(loader.render_to_string('xadmin/blocks/model_list.nav_menu.filters.html', context_instance=context)) def block_nav_form(self, context, nodes): if self.search_fields: nodes.append( loader.render_to_string( 'xadmin/blocks/model_list.nav_form.search_form.html', {'search_var': SEARCH_VAR, 'remove_search_url': self.admin_view.get_query_string(remove=[SEARCH_VAR]), 'search_form_params': self.admin_view.get_form_params(remove=[SEARCH_VAR,'p'])}, context_instance=context)) site.register_plugin(FilterPlugin, ListAdminView) site.register_plugin(FilterPlugin, GridPage) # @filter_manager.register class QuickFilterMultiSelectFieldListFilter(MultiSelectFieldListFilter): """ Delegates the filter to the default filter and ors the results of each Lists the distinct values of each field as a checkbox Uses the default spec for each """ template = 'xadmin/filters/quickfilter.html' class QuickFilterPlugin(BaseAdminPlugin):
return queryset.distinct() else: return queryset # Media def get_media(self, media): if bool(filter(lambda s: isinstance(s, DateFieldListFilter), self.filter_specs)): media = media + self.vendor('datepicker.css', 'datepicker.js', 'xadmin.widget.datetime.js') if bool(filter(lambda s: isinstance(s, RelatedFieldSearchFilter), self.filter_specs)): media = media + self.vendor( 'select.js', 'select.css', 'xadmin.widget.select.js') return media + self.vendor('xadmin.plugin.filters.js') # Block Views def block_nav_menu(self, context, nodes): if self.has_filters: nodes.append(loader.render_to_string('xadmin/blocks/model_list.nav_menu.filters.html', context_instance=context)) def block_nav_form(self, context, nodes): if self.search_fields: nodes.append( loader.render_to_string( 'xadmin/blocks/model_list.nav_form.search_form.html', {'search_var': SEARCH_VAR, 'remove_search_url': self.admin_view.get_query_string(remove=[SEARCH_VAR]), 'search_form_params': self.admin_view.get_form_params(remove=[SEARCH_VAR])}, context_instance=context)) site.register_plugin(FilterPlugin, ListAdminView)
# Field('content', template="xcms/content_field.html") # ), # ) # style_fields = {'content': 'wysi_ck', 'categories':'m2m_tree'} # class CategoryAdmin(object): # list_display = ('name', 'parent') # list_display_links = ('id', 'name',) # search_fields = ('name', ) # list_editable = ('name', ) # list_filter = ('parent', ) xadmin.site.register(enterprise, EnterpriseAdmin) xadmin.site.register(party, PartyAdmin) xadmin.site.register(member, MemberAdmin) xadmin.site.register(UserProfile, UserProfileAdmin) xadmin.site.register(WorkUserProfile, WorkUserProfileAdmin) xadmin.site.register(Pioneer, PioneerAdmin) xadmin.site.register(LifeTips, LifeTipsAdmin) xadmin.site.register(PartyWork, PartyWorkAdmin) xadmin.site.register(Notice, NoticeAdmin) xadmin.site.register(Spirit, SpiritAdmin) xadmin.site.register(Policy, PolicyAdmin) xadmin.site.register(BusinessProcess, BusinessProcessAdmin) xadmin.site.register(Question, QuestionAdmin) site.register_plugin(MyPlugin, ListAdminView) # site.register_plugin(ImportPlugin,ListAdminView) # xadmin.site.register(Article, ArticleAdmin) # xadmin.site.register(Category, CategoryAdmin)