def get_context(self): """ Prepare the context for templates. """ self.title = _('%s List') % force_str(self.opts.verbose_name) model_fields = [(f, f.name in self.list_display, self.get_check_field_url(f)) for f in (list(self.opts.fields) + self.get_model_method_fields()) if f.name not in self.list_exclude] new_context = { 'model_name': force_str(self.opts.verbose_name_plural), 'title': self.title, 'cl': self, 'model_fields': model_fields, 'clean_select_field_url': self.get_query_string(remove=[COL_LIST_VAR]), 'has_add_permission': self.has_add_permission(), 'app_label': self.app_label, 'brand_name': self.opts.verbose_name_plural, 'brand_icon': self.get_model_icon(self.model), 'add_url': self.model_admin_url('add'), 'result_headers': self.result_headers(), 'results': self.results() } context = super(ListAdminView, self).get_context() context.update(new_context) return context
def post_response(self): """ Determines the HttpResponse for the add_view stage. """ request = self.request msg = _( 'The %(name)s "%(obj)s" was added successfully.') % {'name': force_str(self.opts.verbose_name), 'obj': "<a class='alert-link' href='%s'>%s</a>" % (self.model_admin_url('change', self.new_obj._get_pk_val()), force_str(self.new_obj))} if "_continue" in request.REQUEST: self.message_user( msg + ' ' + _("You may edit it again below."), 'success') return self.model_admin_url('change', self.new_obj._get_pk_val()) if "_addanother" in request.REQUEST: self.message_user(msg + ' ' + (_("You may add another %s below.") % force_str(self.opts.verbose_name)), 'success') return request.path else: self.message_user(msg, 'success') # Figure out where to redirect. If the user has change permission, # redirect to the change-list page for this object. Otherwise, # redirect to the admin index. if "_redirect" in request.REQUEST: return request.REQUEST["_redirect"] elif self.has_view_permission(): return self.model_admin_url('changelist') else: return self.get_admin_url('index')
def post_response(self): self.message_user(_('The %(name)s "%(obj)s" was deleted successfully.') % {'name': force_str(self.opts.verbose_name), 'obj': force_str(self.obj)}, 'success') if not self.has_view_permission(): return self.get_admin_url('index') return self.model_admin_url('changelist')
def render(self, name, value, attrs=None): if value is None: value = '' final_attrs = self.build_attrs(attrs, name=name) final_attrs['class'] = 'nav nav-pills nav-stacked' output = [u'<ul%s>' % flatatt(final_attrs)] options = self.render_options(force_str(value), final_attrs['id']) if options: output.append(options) output.append(u'</ul>') output.append('<input type="hidden" id="%s_input" name="%s" value="%s"/>' % (final_attrs['id'], name, force_str(value))) return mark_safe(u'\n'.join(output))
def render(self, name, value, attrs=None): if value is None: value = '' final_attrs = self.build_attrs(attrs, name=name) final_attrs['class'] = 'nav nav-pills nav-stacked' output = [u'<ul%s>' % flatatt(final_attrs)] options = self.render_options(force_str(value), final_attrs['id']) if options: output.append(options) output.append(u'</ul>') output.append( '<input type="hidden" id="%s_input" name="%s" value="%s"/>' % (final_attrs['id'], name, force_str(value))) return mark_safe(u'\n'.join(output))
def get_context(self): new_context = { 'title': _('Add %s') % force_str(self.opts.verbose_name), } context = super(CreateAdminView, self).get_context() context.update(new_context) return context
def get_breadcrumb(self): bcs = super(DetailAdminView, self).get_breadcrumb() item = {'title': force_str(self.obj)} if self.has_view_permission(): item['url'] = self.model_admin_url('detail', self.obj.pk) bcs.append(item) return bcs
def _get_datas(self, context): rows = context['results'] new_rows = [[self._format_value(o) for o in filter(lambda c:getattr(c, 'export', False), r.cells)] for r in rows] new_rows.insert(0, [force_str(c.text) for c in context['result_headers'].cells if c.export]) return new_rows
def _get_objects(self, context): headers = [c for c in context['result_headers'].cells if c.export] rows = context['results'] return [dict([ (force_str(headers[i].text), self._format_value(o)) for i, o in enumerate(filter(lambda c:getattr(c, 'export', False), r.cells))]) for r in rows]
def get_breadcrumb(self): bcs = super(ModelFormAdminView, self).get_breadcrumb() item = {'title': _('Add %s') % force_str(self.opts.verbose_name)} if self.has_add_permission(): item['url'] = self.model_admin_url('add') bcs.append(item) return bcs
def label(self): text = mark_safe( self.text) if self.allow_tags else conditional_escape(self.text) if force_str(text) == '': text = mark_safe(' ') for wrap in self.wraps: text = mark_safe(wrap % text) return text
def get_context(self): new_context = { 'title': _('Change %s') % force_str(self.org_obj), 'object_id': str(self.org_obj.pk), } context = super(UpdateAdminView, self).get_context() context.update(new_context) return context
def val(self): text = mark_safe( self.text) if self.allow_tags else conditional_escape(self.text) if force_str(text) == '' or text == 'None' or text == EMPTY_CHANGELIST_VALUE: text = mark_safe( '<span class="text-muted">%s</span>' % EMPTY_CHANGELIST_VALUE) for wrap in self.wraps: text = mark_safe(wrap % text) return text
def init_request(self, object_id, *args, **kwargs): self.obj = self.get_object(unquote(object_id)) if not self.has_view_permission(self.obj): raise PermissionDenied if self.obj is None: raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_str(self.opts.verbose_name), 'key': escape(object_id)})
def get_breadcrumb(self): bcs = super(ModelFormAdminView, self).get_breadcrumb() item = {'title': force_str(self.org_obj)} if self.has_change_permission(): item['url'] = self.model_admin_url('change', self.org_obj.pk) bcs.append(item) return bcs
def _get_objects(self, context): headers = [c for c in context['result_headers'].cells if c.export] rows = context['results'] return [ dict([(force_str(headers[i].text), self._format_value(o)) for i, o in enumerate( filter(lambda c: getattr(c, 'export', False), r.cells))]) for r in rows ]
def val(self): text = mark_safe(self.text) if self.allow_tags else conditional_escape( self.text) if force_str( text ) == '' or text == 'None' or text == EMPTY_CHANGELIST_VALUE: text = mark_safe('<span class="text-muted">%s</span>' % EMPTY_CHANGELIST_VALUE) for wrap in self.wraps: text = mark_safe(wrap % text) return text
def post_response(self): """ Determines the HttpResponse for the change_view stage. """ opts = self.new_obj._meta obj = self.new_obj request = self.request verbose_name = opts.verbose_name pk_value = obj._get_pk_val() msg = _('The %(name)s "%(obj)s" was changed successfully.') % { 'name': force_str(verbose_name), 'obj': force_str(obj) } if "_continue" in request.REQUEST: self.message_user(msg + ' ' + _("You may edit it again below."), 'success') return request.path elif "_addanother" in request.REQUEST: self.message_user( msg + ' ' + (_("You may add another %s below.") % force_str(verbose_name)), 'success') return self.model_admin_url('add') else: self.message_user(msg, 'success') # Figure out where to redirect. If the user has change permission, # redirect to the change-list page for this object. Otherwise, # redirect to the admin index. if "_redirect" in request.REQUEST: return request.REQUEST["_redirect"] elif self.has_view_permission(): change_list_url = self.model_admin_url('changelist') if 'LIST_QUERY' in self.request.session \ and self.request.session['LIST_QUERY'][0] == self.model_info: change_list_url += '?' + self.request.session[ 'LIST_QUERY'][1] return change_list_url else: return self.get_admin_url('index')
def get_breadcrumb(self): bcs = super(DeleteAdminView, self).get_breadcrumb() bcs.append({ 'title': force_str(self.obj), 'url': self.get_object_url(self.obj) }) item = {'title': _('Delete')} if self.has_delete_permission(): item['url'] = self.model_admin_url('delete', self.obj.pk) bcs.append(item) return bcs
def init_request(self, object_id, *args, **kwargs): self.org_obj = self.get_object(unquote(object_id)) if not self.has_change_permission(self.org_obj): raise PermissionDenied if self.org_obj is None: raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_str(self.opts.verbose_name), 'key': escape(object_id)}) # comm method for both get and post self.prepare_form()
def init_request(self, object_id, *args, **kwargs): self.org_obj = self.get_object(unquote(object_id)) # For list view get new field display html self.pk_attname = self.opts.pk.attname if not self.has_change_permission(self.org_obj): raise PermissionDenied if self.org_obj is None: raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_str(self.opts.verbose_name), 'key': escape(object_id)})
def _get_datas(self, context): rows = context['results'] new_rows = [[ self._format_value(o) for o in filter(lambda c: getattr(c, 'export', False), r.cells) ] for r in rows] new_rows.insert(0, [ force_str(c.text) for c in context['result_headers'].cells if c.export ]) return new_rows
def init_request(self, object_id, *args, **kwargs): self.obj = self.get_object(unquote(object_id)) if not self.has_view_permission(self.obj): raise PermissionDenied if self.obj is None: raise Http404( _('%(name)s object with primary key %(key)r does not exist.') % { 'name': force_str(self.opts.verbose_name), 'key': escape(object_id) })
def get_context(self): new_context = { 'title': _('%s Detail') % force_str(self.opts.verbose_name), 'form': self.form_obj, 'object': self.obj, 'has_change_permission': self.has_change_permission(self.obj), 'has_delete_permission': self.has_delete_permission(self.obj), 'content_type_id': ContentType.objects.get_for_model(self.model).id, } context = super(DetailAdminView, self).get_context() context.update(new_context) return context
def post_response(self): """ Determines the HttpResponse for the change_view stage. """ opts = self.new_obj._meta obj = self.new_obj request = self.request verbose_name = opts.verbose_name pk_value = obj._get_pk_val() msg = _('The %(name)s "%(obj)s" was changed successfully.') % {'name': force_str(verbose_name), 'obj': force_str(obj)} if "_continue" in request.REQUEST: self.message_user( msg + ' ' + _("You may edit it again below."), 'success') return request.path elif "_addanother" in request.REQUEST: self.message_user(msg + ' ' + (_("You may add another %s below.") % force_str(verbose_name)), 'success') return self.model_admin_url('add') else: self.message_user(msg, 'success') # Figure out where to redirect. If the user has change permission, # redirect to the change-list page for this object. Otherwise, # redirect to the admin index. if "_redirect" in request.REQUEST: return request.REQUEST["_redirect"] elif self.has_view_permission(): change_list_url = self.model_admin_url('changelist') if 'LIST_QUERY' in self.request.session \ and self.request.session['LIST_QUERY'][0] == self.model_info: change_list_url += '?' + self.request.session['LIST_QUERY'][1] return change_list_url else: return self.get_admin_url('index')
def post_response(self): """ Determines the HttpResponse for the add_view stage. """ request = self.request msg = _('The %(name)s "%(obj)s" was added successfully.') % { 'name': force_str(self.opts.verbose_name), 'obj': "<a class='alert-link' href='%s'>%s</a>" % (self.model_admin_url( 'change', self.new_obj._get_pk_val()), force_str(self.new_obj)) } if "_continue" in request.REQUEST: self.message_user(msg + ' ' + _("You may edit it again below."), 'success') return self.model_admin_url('change', self.new_obj._get_pk_val()) if "_addanother" in request.REQUEST: self.message_user( msg + ' ' + (_("You may add another %s below.") % force_str(self.opts.verbose_name)), 'success') return request.path else: self.message_user(msg, 'success') # Figure out where to redirect. If the user has change permission, # redirect to the change-list page for this object. Otherwise, # redirect to the admin index. if "_redirect" in request.REQUEST: return request.REQUEST["_redirect"] elif self.has_view_permission(): return self.model_admin_url('changelist') else: return self.get_admin_url('index')
def get_xlsx_export(self, context): datas = self._get_datas(context) output = StringIO() export_header = (self.request.GET.get('export_xlsx_header', 'off') == 'on') model_name = self.opts.verbose_name book = xlsxwriter.Workbook(output) sheet = book.add_worksheet(u"%s %s" % (_(u'Sheet'), force_str(model_name))) styles = { 'datetime': book.add_format({'num_format': 'yyyy-mm-dd hh:mm:ss'}), 'date': book.add_format({'num_format': 'yyyy-mm-dd'}), 'time': book.add_format({'num_format': 'hh:mm:ss'}), 'header': book.add_format({ 'font': 'name Times New Roman', 'color': 'red', 'bold': 'on', 'num_format': '#,##0.00' }), 'default': book.add_format() } if not export_header: datas = datas[1:] for rowx, row in enumerate(datas): for colx, value in enumerate(row): if export_header and rowx == 0: cell_style = styles['header'] else: if isinstance(value, datetime.datetime): cell_style = styles['datetime'] elif isinstance(value, datetime.date): cell_style = styles['date'] elif isinstance(value, datetime.time): cell_style = styles['time'] else: cell_style = styles['default'] sheet.write(rowx, colx, value, cell_style) book.close() output.seek(0) return output.getvalue()
def init_request(self, object_id, *args, **kwargs): self.org_obj = self.get_object(unquote(object_id)) # For list view get new field display html self.pk_attname = self.opts.pk.attname if not self.has_change_permission(self.org_obj): raise PermissionDenied if self.org_obj is None: raise Http404( _('%(name)s object with primary key %(key)r does not exist.') % { 'name': force_str(self.opts.verbose_name), 'key': escape(object_id) })
def init_request(self, object_id, *args, **kwargs): self.org_obj = self.get_object(unquote(object_id)) if not self.has_change_permission(self.org_obj): raise PermissionDenied if self.org_obj is None: raise Http404( _('%(name)s object with primary key %(key)r does not exist.') % { 'name': force_str(self.opts.verbose_name), 'key': escape(object_id) }) # comm method for both get and post self.prepare_form()
def get_context(self): if self.perms_needed or self.protected: title = _("Cannot delete %(name)s") % {"name": force_str(self.opts.verbose_name)} else: title = _("Are you sure?") new_context = { "title": title, "object": self.obj, "deleted_objects": self.deleted_objects, "model_count": tuple(dict(self.model_count).items()), "perms_lacking": self.perms_needed, "protected": self.protected, } context = super(DeleteAdminView, self).get_context() context.update(new_context) return context
def get_xls_export(self, context): datas = self._get_datas(context) output = StringIO() export_header = (self.request.GET.get('export_xls_header', 'off') == 'on') model_name = self.opts.verbose_name book = xlwt.Workbook(encoding='utf8') sheet = book.add_sheet(u"%s %s" % (_(u'Sheet'), force_str(model_name))) styles = { 'datetime': xlwt.easyxf(num_format_str='yyyy-mm-dd hh:mm:ss'), 'date': xlwt.easyxf(num_format_str='yyyy-mm-dd'), 'time': xlwt.easyxf(num_format_str='hh:mm:ss'), 'header': xlwt.easyxf('font: name Times New Roman, color-index red, bold on', num_format_str='#,##0.00'), 'default': xlwt.Style.default_style } if not export_header: datas = datas[1:] for rowx, row in enumerate(datas): for colx, value in enumerate(row): if export_header and rowx == 0: cell_style = styles['header'] else: if isinstance(value, datetime.datetime): cell_style = styles['datetime'] elif isinstance(value, datetime.date): cell_style = styles['date'] elif isinstance(value, datetime.time): cell_style = styles['time'] else: cell_style = styles['default'] sheet.write(rowx, colx, value, style=cell_style) book.save(output) output.seek(0) return output.getvalue()
def get_xlsx_export(self, context): datas = self._get_datas(context) output = StringIO.StringIO() export_header = ( self.request.GET.get('export_xlsx_header', 'off') == 'on') model_name = self.opts.verbose_name book = xlsxwriter.Workbook(output) sheet = book.add_worksheet( u"%s %s" % (_(u'Sheet'), force_str(model_name))) styles = {'datetime': book.add_format({'num_format': 'yyyy-mm-dd hh:mm:ss'}), 'date': book.add_format({'num_format': 'yyyy-mm-dd'}), 'time': book.add_format({'num_format': 'hh:mm:ss'}), 'header': book.add_format({'font': 'name Times New Roman', 'color': 'red', 'bold': 'on', 'num_format': '#,##0.00'}), 'default': book.add_format()} if not export_header: datas = datas[1:] for rowx, row in enumerate(datas): for colx, value in enumerate(row): if export_header and rowx == 0: cell_style = styles['header'] else: if isinstance(value, datetime.datetime): cell_style = styles['datetime'] elif isinstance(value, datetime.date): cell_style = styles['date'] elif isinstance(value, datetime.time): cell_style = styles['time'] else: cell_style = styles['default'] sheet.write(rowx, colx, value, cell_style) book.close() output.seek(0) return output.getvalue()
def get_xls_export(self, context): datas = self._get_datas(context) output = StringIO.StringIO() export_header = ( self.request.GET.get('export_xls_header', 'off') == 'on') model_name = self.opts.verbose_name book = xlwt.Workbook(encoding='utf8') sheet = book.add_sheet( u"%s %s" % (_(u'Sheet'), force_str(model_name))) styles = {'datetime': xlwt.easyxf(num_format_str='yyyy-mm-dd hh:mm:ss'), 'date': xlwt.easyxf(num_format_str='yyyy-mm-dd'), 'time': xlwt.easyxf(num_format_str='hh:mm:ss'), 'header': xlwt.easyxf('font: name Times New Roman, color-index red, bold on', num_format_str='#,##0.00'), 'default': xlwt.Style.default_style} if not export_header: datas = datas[1:] for rowx, row in enumerate(datas): for colx, value in enumerate(row): if export_header and rowx == 0: cell_style = styles['header'] else: if isinstance(value, datetime.datetime): cell_style = styles['datetime'] elif isinstance(value, datetime.date): cell_style = styles['date'] elif isinstance(value, datetime.time): cell_style = styles['time'] else: cell_style = styles['default'] sheet.write(rowx, colx, value, style=cell_style) book.save(output) output.seek(0) return output.getvalue()
def get_title(self): return self.title % force_str(self.obj)
def init_request(self, object_id, *args, **kwargs): "The 'delete' admin view for this model." self.obj = self.get_object(unquote(object_id)) if not self.has_delete_permission(self.obj): raise PermissionDenied if self.obj is None: raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_str(self.opts.verbose_name), 'key': escape(object_id)}) using = router.db_for_write(self.model) # Populate deleted_objects, a data structure of all related objects that # will also be deleted. (self.deleted_objects, self.model_count, self.perms_needed, self.protected) = get_deleted_objects( [self.obj], self.opts, self.request.user, self.admin_site, using)