请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

xadmin导入excel

老师,请知道一下在xadmin中,导入excel的具体逻辑,希望有个demo参考,当获取到request.file后,这个文件是存储在服务器还是到了缓存?

正在回答 回答被采纳积分+3

2回答

bobby 2017-05-11 09:42:43

def post(self, request, *args, **kwargs):
   if 'excel' in request.FILES:
       upload_redcord = UploadRecord()
       upload_redcord.user = request.user
       upload_redcord.file_name = request.FILES['excel'].name
       upload_redcord.upload_type = "detection"
       upload_redcord.save()
       upload_redcord.upload_file.save(request.FILES['excel'].name, request.FILES['excel'])
       try:
           pici_num = request.FILES['excel'].name.split(".")[0].split("_")[1]
           if len(pici_num) != 10 or not pici_num.startswith(u"ZL"):
               upload_redcord.process = u"文件名出错"
               upload_redcord.message = u"文件名错误, 正确的文件名格式为:检测数据_ZL20160806"
               upload_redcord.save()
           else:
               upload_redcord.pici_num = pici_num
               upload_redcord.save()

               arc_download = ArchiveDownload()
               arc_download.user = request.user
               arc_download.task_type = 1
               arc_download.pici_num = pici_num
               arc_download.save()

       except Exception as e:
           upload_redcord.process = u"文件名出错"
           upload_redcord.message = u"文件名错误, 正确的文件名格式为:ZL20160806"
           upload_redcord.save()


   return super(UserDetectionAdmin, self).post(request, args, kwargs)


你参考一下这段代码

0 回复 有任何疑惑可以回复我~
  • 提问者 repiak #1
    老师,已完成excel导入数据,但是不懂这样会不会占用资源另外,在xadmin中image的显示仍然有点问题,在xadmin产品详细页面中,xadmin会有个image的规则,若image的vlue为cource/……/xxx.jpg时则显示,若为http://开头则不会显示.
    回复 有任何疑惑可以回复我~ 2017-05-13 12:32:44
  • bobby 回复 提问者 repiak #2
    http这个规则不是xadmin完成的, 这个是浏览器完成的, 所以如果图片文件在本地就不要加http开头, 如果在其他服务器上就一定要加http开头, 另外我不太明白你所说的是占资源是什么? 我一般处理这种excel是先将文件保存, 如果有处理,我会单独用一个异步任务去做,这样体验会好一点
    回复 有任何疑惑可以回复我~ 2017-05-13 13:42:33
  • 提问者 repiak 回复 bobby #3
    老师,是这样的,在xadmin课程页面中的某一个数据详情中,如何实现图片能读取到http开头的网络图片
    回复 有任何疑惑可以回复我~ 2017-05-14 00:46:38
提问者 repiak 2017-05-13 12:27:39
#先在环境中pip install xlrd

import xlrd
from .models import Course
from organization.models import CourseOrg

def post(self, request, *args, **kwargs):
    if 'excel' in request.FILES:
        #初始化course
        course = Course()
        #读取excel文件
        data = xlrd.open_workbook(request.FILES['excel'].name)
        #获取excel第一个表
        table = data.sheets()[0]
        #获取该表行数
        nrows = table.nrows
        #第一行一般为表头,故从该表第二行开始循环取值
        for j in range(1, nrows):
            #获取机构名称,根据表具体内容调整下标
            courseorg = table.row_values(j)[0]
            #通过excel中机构名称中文向CourseOrg查询外键
            course.org_id= CourseOrg.objects.get(name=courseorg).id
            #获取其他字段值,根据表具体内容调整下标
            course.name = table.row_values(j)[1]
            course.desc = table.row_values(j)[2]
            course.image = table.row_values(j)[3]
            …………
            #保存数据
            course.save()
    return super(CourseAdmin, self).post(request, args, kwargs)


5 回复 有任何疑惑可以回复我~
  • 谢谢你!
    data = xlrd.open_workbook(request.FILES['excel'].name
    你好我在这一步出错了,怎么回事?
    回复 有任何疑惑可以回复我~ 2017-05-20 15:56:56
  • 很有用,感谢
    回复 有任何疑惑可以回复我~ 2019-07-15 12:34:49
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信