在对数据处理上,Excel一直是最基础的,最简单的。其他编程语言都只是让数据显示的更加美观以及高级,因此,无论什么工具处理数据都脱离不了Excel。今天就给大家分享一下如何使用Python django框架怎么展示excel数据
假设excel表中有4列,每列分别是版本号,属性,属性值,仓库地址
第一步,新建一个app,然后在app中新建model
@python_2_unicode_compatible class KNSVNHistory(models.Model): revision = models.IntegerField(verbose_name=u"修订版本", blank=True, null=True) prop = models.CharField(verbose_name=u'SVN属性', choices=constants.YD_SVN_PROP_CHOICE, max_length=60, default=constants.YD_SVN_PROP_DATE) value = models.TextField(verbose_name=u"SVN属性值", blank=False, null=False, default=u"") repo = models.CharField(max_length=100, verbose_name=u"SVN仓库", blank=False, null=False) editor = models.ForeignKey(User, verbose_name=u"编辑者", blank=True, null=True) ctime = models.DateTimeField(verbose_name=u"创建时间", auto_now_add=True, ) mtime = models.DateTimeField(verbose_name=u"修改时间", auto_now=True, ) class Meta: ordering = ['ctime'] def __str__(self): return self.value
如上代码,我自己创建了用来保存数据的model,方便我们从后台导入数据
接下来我们创建后台上传文件的接口
@python_2_unicode_compatible class ImportFile(models.Model): file = models.FileField(upload_to='File') name = models.CharField(max_length=50, verbose_name=u'文件名') class Meta: ordering = ['name'] def __str__(self): return self.name
下面就是我们解析excle的功能部分,在app下新建一个utils.py文件
from openpyxl import Workbook,load_workbook from openpyxl.utils import get_column_letter from .models import KNSVNHistory from openpyxl.compat import range def import_user(self, request, obj, change): wb = load_workbook(filename=obj.YDUserFile.path) ws = wb.get_sheet_names() ws = wb.get_sheet_by_name(ws[0]) headers = ['version', 'attr', 'value', 'addr'] lists = [] users = request.user for row in range(2, 5): r = {} for col in range(1, len(headers) + 1): key = headers[col - 1] r[key] = ws.cell(row=row, column=col).value lists.append(r) sqllist = [] for cell in lists: # for header in headers: revision = cell['version'] prop = cell['attr'] value = cell['value'] repo = cell['addr'] sql = KNSVNHistory(revision=revision, prop=prop, value=value, repo=repo, editor=users) sqllist.append(sql) KNSVNHistory.objects.bulk_create(sqllist)
打开admin.py
因为我们要在后台保存,所以我们需要重写ModelAdmin的save_mode
from .utils import import_user class KNImportFileAdmin(admin.ModelAdmin): list_display = ('file','name',) list_filter = ['name',] def save_model(self, request, obj, form, change): re = super(YDImportFileAdmin,self).save_model(request, obj, form, change) import_user(self, request, obj, change) return re
在上面的代码中使用了第三方库openpyxl来解析excel
关键点在于获取文件对象的时候,我们是通过传过来的obj对象来获取fileobj,其实通俗来讲就是在我们点击上传的时候,重写的save_mode方法拦截了整个对象,我们在这里拿出我们要解析的excel文件对象进行解析,后面的解析过程也比较简单,我们将每行数据解析之后通过字典来保存,然后再用key访问取到进行数据库操作,在数据库操作的时候我们使用KNSVNHistory.objects.bulk_create 来提高效率。
以上就是“django框架怎么展示excel数据?”的详细内容,想要了解更多django框架内容欢迎持续关注编程学习网
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://phpxs.com/post/9960/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料
查 看2022高级编程视频教程免费获取