def default_list_fields(self): exclude = ['id', 'password', 'system_pass', 'user_permissions'] base_fields = list(fields_for_model(self.model, exclude=exclude)) extra_fields = getattr(self.opts, 'extra_fields', None) if extra_fields and isinstance(extra_fields, list): base_fields.extend(extra_fields) return base_fields
def get_model_all_fields(self, exclude=None): """ 返回模型包含扩展字段的所有字段 """ if not exclude: exclude = ['id', 'password', 'system_pass', 'user_permissions'] base_fields = list(fields_for_model(self.model, exclude=exclude)) extra_fields = getattr(self.opts, 'extra_fields', None) if extra_fields and isinstance(extra_fields, list): base_fields.extend(extra_fields) return base_fields
def initial_user_configuration(instance, created, **kwargs): if created: models = apps.get_app_config('idcops').get_models() exclude = ['onidc', 'deleted', 'mark', 'id', 'password'] configures = [] for model in models: fds = [f for f in fields_for_model(model) if f not in exclude] _fields = getattr(model._meta, 'list_display', fds) fields = _fields if isinstance(_fields, list) else fds content = {'list_only_date': 1, 'list_display': fields} config = dict( onidc=instance.onidc, creator=instance, mark='list', content_type=get_content_type_for_model(model), content=json.dumps(content), ) configures.append(Configure(**config)) Configure.objects.bulk_create(configures)
def make_info_panel(self): pin_fields = [ 'actived', 'deleted', 'created', 'creator', 'modified', 'operator', 'onidc', 'mark' ] exclude = [ 'id', 'password', 'user_permissions', 'onidc', 'actived', 'deleted', 'mark' ] base_fields = list(fields_for_model(self.model, exclude=exclude)) new_pin_fields = [i for i in pin_fields if i in base_fields] fields = [ f for f in base_fields if f not in new_pin_fields and f not in exclude ] fields.extend(new_pin_fields) default_fields = getattr(self.opts, 'list_display', None) if default_fields and isinstance(default_fields, list): o = [f for f in fields if f not in default_fields] default_fields.extend(o) fields = default_fields panel = '' for index, field_name in enumerate(fields, 1): tr_format = '<tr><th>{th}</th><td>{td}</td>' th = label_for_field(name=field_name, model=self.model) try: field = self.opts.get_field(field_name) value = field.value_from_object(self.object) td = display_for_field(value, field, only_date=False) except BaseException: try: f, _, td = lookup_field(field_name, self.object, self.model) except BaseException: pass if (index % 2 == 0): append = '<tr class="visible-xs"><th>{th}</th><td>{td}</td></tr>' _format = '<th class="hidden-xs">{th}</th><td class="hidden-xs">{td}</td></tr>' tr_format = _format + append tr_html = tr_format.format(th=th, td=td) panel += tr_html return mark_safe(panel)
def make_to_excel(object_list, fields=None): ''' object_list queryset. fields is a list.eg: fields=['id', 'created', 'creator'] ''' if not object_list: return ''' xlwt设置表格的一些样式 ''' body_style = xlwt.XFStyle() borders = xlwt.Borders() borders.left = 1 borders.right = 1 borders.top = 1 borders.bottom = 1 font = xlwt.Font() font.bold = True pattern = xlwt.Pattern() pattern.pattern = xlwt.Pattern.SOLID_PATTERN pattern.pattern_fore_colour = 22 title_style = xlwt.XFStyle() title_style.borders = borders title_style.font = font title_style.pattern = pattern body_style = xlwt.XFStyle() body_style.borders = borders ''' 开始制作Excel表格 ''' verbose_name = object_list.model._meta.verbose_name wb = xlwt.Workbook(encoding='utf-8') ws = wb.add_sheet('{0}列表'.format(verbose_name)) model = object_list.model fields = fields_for_model(model, fields=fields) # 上面 `fields` 获取某个 model fields 列表. field_names = [] field_verboses = [] for attname, field in fields.items(): if attname not in ['password']: field_names.append(attname) field_verboses.append(label_for_field(attname, model)) for col in range(len(field_verboses)): ws.write(0, col, force_text(field_verboses[col]), title_style) row = 1 for obj in object_list: for index, field_name in enumerate(field_names): field = model._meta.get_field(field_name) value = field.value_from_object(obj) cell_value = display_for_field(value, field, html=False, only_date=False) ws.write(row, index, cell_value, body_style) row += 1 output = BytesIO() wb.save(output) output.seek(0) time = formats.localize( timezone.template_localtime(timezone.datetime.now())) filename = urlquote('{}{}'.format(verbose_name, slugify(time, allow_unicode=True))) # 上面 `filename` 解决导出中文文件名出错的问题 response = HttpResponse(output) # response = StreamingHttpResponse(output) # Stream在这里其实是不起作用了,可以直接HttpResponse response['charset'] = 'utf-8' response['content_type'] = 'application/octet-stream' response['Content-Disposition'] = 'attachment; filename="{}.xls"'.format( filename) return response