Esempio n. 1
0
 def run(self):
     logger.info('Start SaltMan.')
     lc = util.LoopChecker('Main loop')
     while True:
         try:
             targets = self.collect_delegate.collect(self.config)
             self.compress_delegate.compress(self.config, targets)
             time.sleep(1)
             lc.check()
             if len(targets) > 0:
                 lc.reset()
         except:
             e = sys.exc_info()[0]
             logger.error(e)
             time.sleep(5)
Esempio n. 2
0
def file_import(request):  # 文件导入处理
    filename = ""
    filetype = ""
    tablename = ""
    sparatorvalue = ","
    fields = {}  # 已选择字段列表
    target = []  # 目标文件列号
    errmode = 1  # 出错处理方式     1  跳过错误 继续处理     2  退出,并删除已导入记录
    headln = 1
    recordln = 2
    unicode_ = "utf-8"
    relatefield = []
    relrecs = []
    addrelate = 1  # 关联记录处理  1   自动增加       2  关键记录不存在,跳过当次记录,不增加关联记录

    data = dict(request.POST)
    # print data
    errmode = int(data["errmode"][0])
    filename = data["txtfilename"][0]
    filetype = data["txtfiletype"][0]
    sparatorvalue = data["sparatorvalue"][0]
    headln = int(data["headln"][0])
    recordln = int(data["recordln"][0])
    tablename = data["txttablename"][0]
    unicode_ = data["unicode"][0].decode()
    addrelate = int(data["addrelate"][0])

    # 查找字段列表,目标列号
    for n, v in data.items():
        if n.startswith("_chk_"):

            field = str(data["_select_" + n[5:]][0]).decode(unicode_)
            fields[field] = int(n[5:])
    # 查找模型
    model, flds, rlfield = findAllFieldsAndModel(tablename)
    objlist = []
    Employee = GetModel("personnel", "Employee")
    Department = GetModel("personnel", "Department")
    error_list = []

    try:
        if filetype == "txt" or filetype == "csv":
            fs = file(uploadpath + filename, "r")
            rec = fs.readline()
            ln = 1
            while rec != "":
                try:
                    # logger.info(ln)
                    rec = rec.decode(unicode_)
                    if rec.endswith("\r\n"):
                        rec = rec[: len(rec) - 2]
                    linedata = rec.split(sparatorvalue)
                    ltmp = []
                    # logger.info("linedata:",linedata)
                    for l in linedata:
                        if l.startswith('"') and l.endswith('"'):
                            ltmp.append(u"%s" % l[1 : len(l) - 1])
                        else:
                            ltmp.append(u"%s" % l)
                    linedata = ltmp
                    currelobj = []  # 当前行外键实例列表
                    if len(linedata) >= len(fields.keys()):  # 当前行记录不满足已选择字段
                        if ln >= recordln:
                            strwhere = {}
                            upobj = ""
                            isSave = True
                            try:
                                for tmpfld, tmpfldvalue in fields.items():
                                    rf = ""
                                    if tmpfld.find(".") > 0:
                                        for f in model._meta.fields:
                                            if isinstance(f, ForeignKey):
                                                if f.rel.to.__name__ == tmpfld.split(".")[0]:
                                                    strwhere[
                                                        str(f.name + "__" + tmpfld.split(".")[1] + "__exact")
                                                    ] = linedata[tmpfldvalue]
                                    else:
                                        strwhere[str(tmpfld + "__exact")] = linedata[tmpfldvalue]
                                upobj = model.objects.filter(Q(**strwhere))
                            except Exception, e:
                                logger.error("%s" % e)
                            if upobj:
                                obj = upobj[0]
                            else:
                                obj = model()
                            for fld, value in fields.items():
                                relObj = ""
                                isForeignKey = False
                                if fld.find(".") > 0:  # 查找到需要保存关联字段
                                    print "find relate"
                                    for nkey, val in rlfield.items():  # 查找关联记录,更新或创建,并保存
                                        if nkey.__name__ == fld.split(".")[0]:
                                            strfilter = {}
                                            for f in fields:  # 查找关联表多个相应的字段,并生成表达式
                                                if f.find(".") > 0:
                                                    if f.split(".")[0] == nkey.__name__:
                                                        tmpvalue = linedata[fields[f]]
                                                        # tmpvalue=tmpvalue.encode('utf-8')
                                                        strfilter[str(f.split(".")[1] + "__exact")] = tmpvalue

                                            if strfilter:
                                                relObj = nkey.objects.filter(Q(**strfilter))

                                            if len(relObj) <= 0:  # 查找不到记录,生成新记录
                                                if addrelate != 1:
                                                    isSave = False
                                                    break
                                                else:
                                                    relObj = nkey()
                                                    for tfld in fields.keys():
                                                        if tfld.find(".") > 0:
                                                            if tfld.split(".")[0] == nkey.__name__:
                                                                relObj.__setattr__(
                                                                    tfld.split(".")[1], linedata[fields[tfld]]
                                                                )
                                                    isForeignKey = True
                                                    relObj.save()
                                                    relrecs.append(relObj)
                                            else:
                                                isForeignKey = True
                                                relObj = relObj[0]

                                            currelobj.append(relObj)
                                            break
                                if not isSave:
                                    break  # 跳出当前行

                                tobj = ""
                                fieldname = ""
                                if isForeignKey:
                                    for f in obj._meta.fields:  # 查找字段是否是外键
                                        if isinstance(f, ForeignKey) and f.rel.to.__name__ == fld.split(".")[0]:
                                            for tobj in currelobj:
                                                if tobj == f.rel.to:
                                                    break
                                            fieldname = f.name
                                            break

                                    obj.__setattr__(fieldname, tobj)
                                else:
                                    if fld == "PIN":

                                        model_emp = sys.modules["mysite.personnel.models.model_emp"]
                                        settings = sys.modules["mysite.settings"]

                                        if len(str(linedata[value]).strip()) > getattr(settings, "PIN_WIDTH"):
                                            raise Exception(u"%s" % _(u"人员编号长度过长"))
                                        else:
                                            linedata[value] = getattr(model_emp, "format_pin")(str(linedata[value]))
                                    if fld == "code":

                                        dept = Department.objects.filter(code=linedata[value])
                                        if dept:
                                            raise Exception(u"%s" % _(u"部门编号已存在"))
                                    obj.__setattr__(fld, linedata[value])

                            # logger.info("file Line:%s  save is %s "%(ln,isSave))
                            if isSave:
                                obj.save()

                                if type(obj) == Employee:
                                    obj.__setattr__("attarea", (1,))
                                    obj.save()
                                if type(obj) == Department:
                                    if obj.parent == None or obj.parent == "":
                                        obj.parent_id = 1
                                        obj.save()

                                objlist.append(obj)
                    ln += 1
                    rec = fs.readline()
                except Exception, e:
                    # logger.error("%s"%e)
                    try:
                        error_list.append(str(ln) + u" 行      " + u"%s" % e)
                    except:
                        error_list.append(str(ln))
                        pass

                    if errmode == 1:
                        ln += 1
                        rec = fs.readline()
                        continue
                    else:
                        raise
Esempio n. 3
0
                                if datash[row][tmpfldvalue][0] == 2:
                                    dv = int(datash[row][tmpfldvalue][1])
                                else:
                                    dv = datash[row][tmpfldvalue][1]
                                if tmpfld.find(".") > 0:
                                    for f in model._meta.fields:
                                        if isinstance(f, ForeignKey):
                                            if f.rel.to.__name__ == tmpfld.split(".")[0]:
                                                strwhere[str(f.name + "__" + tmpfld.split(".")[1] + "__exact")] = dv
                                else:
                                    strwhere[str(tmpfld + "__exact")] = datash[row][tmpfldvalue][1] = dv
                            # print strwhere
                            # print(Q(**strwhere))
                            upobj = model.objects.filter(Q(**strwhere))
                        except Exception, e:
                            logger.error("%s" % e)
                        if upobj:
                            obj = upobj[0]
                        else:
                            obj = model()
                        currelobj = []

                        for fld, value in fields.items():

                            relObj = ""
                            isForeignKey = False
                            if fld.find(".") > 0:  # 查找到需要保存关联字段

                                # print "find relate"
                                for nkey, val in rlfield.items():  # 查找关联记录,更新或创建,并保存
                                    if nkey.__name__ == fld.split(".")[0]:
def file_import(request):                   #文件导入处理
    filename=""
    filetype=""
    tablename=""
    sparatorvalue=","
    fields={}               #已选择字段列表
    target=[]               #目标文件列号
    errmode=1               #出错处理方式     1  跳过错误 继续处理     2  退出,并删除已导入记录
    headln=1
    recordln=2
    unicode_="utf-8"
    relatefield=[]
    relrecs=[]
    addrelate=1             #关联记录处理  1   自动增加       2  关键记录不存在,跳过当次记录,不增加关联记录
    
    data=dict(request.POST)
    #print data
    errmode=int(data["errmode"][0])
    filename=data["txtfilename"][0]
    filetype=data["txtfiletype"][0]
    sparatorvalue=data["sparatorvalue"][0]
    headln=int(data["headln"][0])
    recordln=int(data["recordln"][0])
    tablename=data["txttablename"][0]
    unicode_=data["unicode"][0].decode()
    addrelate=int(data["addrelate"][0])
    
    #查找字段列表,目标列号
    for n,v in data.items():
        if n.startswith("_chk_"):
            
            field=str(data["_select_"+ n[5:]][0]).decode(unicode_)
            fields[field]=int(n[5:])
    #查找模型
    model,flds,rlfield=findAllFieldsAndModel(tablename)
    objlist=[]
    Employee=GetModel("personnel","Employee")
    Department=GetModel("personnel","Department")
    error_list=[]
    
    try:
        if filetype=="txt" or filetype=="csv":
            fs=file(uploadpath+filename,"r")
            rec=fs.readline()
            ln=1
            while rec!="":
                try:
                    #logger.info(ln)
                    rec=rec.decode(unicode_)
                    if rec.endswith("\r\n"):
                        rec=rec[:len(rec)-2]
                    linedata=rec.split(sparatorvalue)
                    ltmp=[]
                    #logger.info("linedata:",linedata)
                    for l in linedata:
                        if l.startswith('"') and l.endswith('"'):
                            ltmp.append(u"%s"%l[1:len(l)-1])
                        else:
                            ltmp.append(u"%s"%l)
                    linedata=ltmp
                    currelobj=[]                                                                        #当前行外键实例列表
                    if len(linedata)>=len(fields.keys()):                                                #当前行记录不满足已选择字段
                        if ln>=recordln:                            
                            strwhere={}
                            upobj=""
                            isSave=True
                            try:
                                for tmpfld,tmpfldvalue in fields.items():
                                    rf=""
                                    if tmpfld.find(".")>0:
                                        for f in model._meta.fields:
                                            if isinstance(f,ForeignKey):
                                                if f.rel.to.__name__==tmpfld.split(".")[0]:
                                                    strwhere[str(f.name+"__"+tmpfld.split(".")[1]+"__exact")]=linedata[tmpfldvalue]
                                    else:   
                                        strwhere[str(tmpfld+"__exact")]=linedata[tmpfldvalue]
                                upobj=model.objects.filter(Q(**strwhere))
                            except Exception, e:
                                logger.error("%s"%e)
                            if upobj:
                                obj=upobj[0]
                            else:
                                obj=model()
                            for fld,value in fields.items():
                                relObj=""
                                isForeignKey=False
                                if fld.find(".")>0:                                                     #查找到需要保存关联字段
                                    print "find relate"
                                    for nkey,val in rlfield.items():                                 #查找关联记录,更新或创建,并保存
                                        if nkey.__name__==fld.split(".")[0]:
                                            strfilter={}
                                            for f  in fields:                                       #查找关联表多个相应的字段,并生成表达式
                                                if f.find(".")>0 :
                                                    if f.split(".")[0]==nkey.__name__:
                                                        tmpvalue=linedata[fields[f]]
                                                        #tmpvalue=tmpvalue.encode('utf-8')
                                                        strfilter[str(f.split(".")[1]+"__exact")]=tmpvalue
                                            
                                            if strfilter:
                                                relObj=nkey.objects.filter(Q(**strfilter))
                                            
                                            if len(relObj)<=0:                              #查找不到记录,生成新记录
                                                if addrelate!=1:
                                                   isSave=False
                                                   break     
                                                else:
                                                    relObj=nkey()                                        
                                                    for tfld in fields.keys():
                                                        if tfld.find(".")>0:
                                                            if tfld.split(".")[0]==nkey.__name__:
                                                                relObj.__setattr__(tfld.split(".")[1],linedata[fields[tfld]])
                                                    isForeignKey=True
                                                    relObj.save()
                                                    relrecs.append(relObj)
                                            else:
                                                isForeignKey=True
                                                relObj=relObj[0]
                                                
                                            currelobj.append(relObj)
                                            break
                                if not isSave:
                                    break                           #跳出当前行
                                            
                                tobj=""
                                fieldname=""
                                if isForeignKey:
                                    for f  in obj._meta.fields:    #查找字段是否是外键
                                        if isinstance(f,ForeignKey) and  f.rel.to.__name__==fld.split(".")[0]:
                                            for tobj in currelobj:
                                                if tobj==f.rel.to:
                                                    break        
                                            fieldname=f.name
                                            break

                                    obj.__setattr__(fieldname,tobj)
                                else:
                                    if fld=="PIN":
                                        
                                        model_emp=sys.modules['mysite.personnel.models.model_emp']
                                        settings=sys.modules['mysite.settings']
                                        
                                        if len(str(linedata[value]).strip())>getattr(settings,"PIN_WIDTH"):
                                            raise Exception(u"%s"%_(u"人员编号长度过长"))
                                        else:
                                            linedata[value]=getattr(model_emp,"format_pin")(str(linedata[value]))
                                    if fld=="code":
                                        
                                        dept=Department.objects.filter(code=linedata[value])
                                        if dept:
                                            raise Exception(u"%s"%_(u'部门编号已存在'))
                                    obj.__setattr__(fld,linedata[value])

                            #logger.info("file Line:%s  save is %s "%(ln,isSave))
                            if isSave:
                                obj.save()
                                
                                if type(obj)==Employee:
                                   obj.__setattr__('attarea',(1,))
                                   obj.save()
                                if type(obj)==Department:
                                    if obj.parent==None or obj.parent=="":                                        
                                         obj.parent_id=1
                                         obj.save()
                                
                                objlist.append(obj)
                    ln+=1
                    rec=fs.readline()
                except Exception,e:
                    #logger.error("%s"%e)
                    try:
                        error_list.append(str(ln)+u" 行      "+u"%s"%e)
                    except:
                        error_list.append(str(ln))
                        pass
                    
                    if errmode==1:                        
                        ln+=1
                        rec=fs.readline()                       
                        continue
                    else:
                        raise
                                if datash[row][tmpfldvalue][0]==2:
                                    dv=int(datash[row][tmpfldvalue][1])
                                else:
                                    dv=datash[row][tmpfldvalue][1]
                                if tmpfld.find(".")>0:
                                    for f in model._meta.fields:
                                        if isinstance(f,ForeignKey):
                                            if f.rel.to.__name__==tmpfld.split(".")[0]:
                                                strwhere[str(f.name+"__"+tmpfld.split(".")[1]+"__exact")]=dv
                                else:   
                                    strwhere[str(tmpfld+"__exact")]=datash[row][tmpfldvalue][1]=dv
                            #print strwhere
                            #print(Q(**strwhere))
                            upobj=model.objects.filter(Q(**strwhere))
                        except Exception, e:
                            logger.error("%s"%e)
                        if upobj:
                            obj=upobj[0]
                        else:
                            obj=model()
                        currelobj=[]

                        for fld,value in fields.items():

                            relObj=""
                            isForeignKey=False
                            if fld.find(".")>0:                                                     #查找到需要保存关联字段

                                    #print "find relate"
                                for nkey,val in rlfield.items():                                 #查找关联记录,更新或创建,并保存
                                    if nkey.__name__==fld.split(".")[0]:
Esempio n. 6
0
def detailthread(data,session_key):
    filename=""
    filetype=""
    tablename=""
    sparatorvalue=","
    fields={}               #已选择字段列表
    target=[]               #目标文件列号
    errmode=1               #出错处理方式     1  跳过错误 继续处理     2  退出,并删除已导入记录
    headln=1
    recordln=2
    unicode_="utf-8"
    relatefield=[]
    relrecs=[]
    addrelate=1             #关联记录处理  1   自动增加       2  关键记录不存在,跳过当次记录,不增加关联记录
    
#    data=dict(request.POST)
    #print data
    errmode=int(data["errmode"][0])
    filename=data["txtfilename"][0]
    filetype=data["txtfiletype"][0]
    sparatorvalue=data["sparatorvalue"][0]
    headln=int(data["headln"][0])
    recordln=int(data["recordln"][0])
    tablename=data["txttablename"][0]
    unicode_=data["unicode"][0].decode()
    addrelate=int(data["addrelate"][0])
#    session_key=request.session.session_key
    
    session_key = str(session_key)
    #查找字段列表,目标列号
    for n,v in data.items():
        if n.startswith("_chk_"):
            
            field=str(data["_select_"+ n[5:]][0]).decode(unicode_)
            fields[field]=int(n[5:])
    #查找模型
    model,flds,rlfield=findAllFieldsAndModel(tablename)

    objlist=[]
    Employee=GetModel("personnel","Employee")
    Department=GetModel("personnel","Department")
    error_list=[]
    
#    global user_process
#    #加入全局变量
#    processdata_global={}
#    
#    user_process[session_key]=processdata_global
#    user_process[session_key]["process"]=0
#    user_process[session_key]["index"]=1
#    user_process[session_key]["return_value"]=""
#    user_process[session_key]["total"]=1
    
    processdata={}
#    processdata["process"]=1
#    processdata["index"]=1
#    processdata["return_value"]=""
#    processdata["total"]=1
#    cache.set(session_key,processdata,3600)
    
    
    
    try:
        if filetype=="txt" or filetype=="csv":                        
            fs=file(uploadpath+filename,"r")
            rec=fs.readline()#读取每行
            sheet_data = []
            ln=1
            while rec!="":
                if ln>=recordln:
                    rec=rec.decode(unicode_)
                    if rec.endswith("\r\n"):
                        rec=rec[:len(rec)-2]
                    linedata=rec.split(sparatorvalue)
                    ltmp=[]
                    for l in linedata:
                        if l.startswith('"') and l.endswith('"'):
                            ltmp.append(u"%s"%l[1:len(l)-1])
                        else:
                            ltmp.append(u"%s"%l)
                    sheet_data.append(ltmp)
                ln+=1
                rec=fs.readline()           
            fs.close()
            return sheet_data
        elif filetype == "xls" : # word 2007 xls文件后缀应该添加
            sheetdata=ParseXlsUxlrd(uploadpath+filename)
          #  global UPLOAD_FILEDATA
            #datash = UPLOAD_FILEDATA
            datash=sheetdata[0][1]
            #在运行开始让进度条 初始化为 0
            processdata['total'] = len(datash)#文件总数
            cache.set(session_key,processdata,3600)
#            user_process[session_key]['total'] = len(datash)#文件总数
#            deptfkey={}#部门外键存放的地方
#            hasdeptf=False
#            perfkey={}# 模型的数据存放的地方
#            for fld,value in fields.items():#遍历提交 对应关系
#                if fld.find(".")>0:
#                    fr=fld.split(".")
#                    if fr[0]=="Department":
#                        deptfkey[fr[1]]=value
#                else:
#                    perfkey[fld]=value
#                    
#            if deptfkey.has_key("code"):
#                hasdeptf=True
            
            
            for row in range(len(datash)):#每行每行开始读取
                if row==len(datash):
                    processdata["process"]=processdata["total"]
                    #变量
#                    user_process[session_key]["process"]=user_process[session_key]["total"]
                else:
                    processdata["process"] = processdata["process"]+1
                    #全局变量
#                    user_process[session_key]["process"] = user_process[session_key]["process"]+1
                cache.set(session_key,processdata,3600)
                try:
                   
                    if row>=recordln-1:#从第二行开始读取数据 
                        isSave=True #这里定义几个标识符 
                        has_property=False
                        strwhere={}
                        upobj=""
                        
                        
                        try:
                            for tmpfld,tmpfldvalue in fields.items():#fields.item() [(u'Department.code', 2), (u'EName', 1), (u'PIN', 0), (u'Department.name', 3)]
                                rf=""
                                #datash[1]=[[2, 1128.0], [1, u'\u5b8b\u7231\u73b2'], [1, u'2'], [1, u'\u90e8\u95e8\u540d\u79f0']], 
                                #datash[1][tmpfldvalue] 选取的是 数据对应的列 datash[row][tmpfldvalue][0]=1
                                if datash[row][tmpfldvalue][0]==2:#datsh[row]读取的每行数据 然后部选择对应的部门 编号所在的列
                                    dv=str(int(datash[row][tmpfldvalue][1]))
                                else:
                                    dv=datash[row][tmpfldvalue][1]# 为什么 判断,感觉没什么必要?? dv=2
                                
                                if tmpfld.find(".")>0:#查找是否有外键的开始, 以.号 判断
                                    for f in model._meta.fields:#遍历循环(估计这个也最 消耗时间)
                                        if isinstance(f,ForeignKey):#匹配 外键  属性 也就是模型中的 每个数据对象
                                            if f.rel.to.__name__==tmpfld.split(".")[0]:#其中 f.rel.to.__name__ 是 模型下面的对象名称 如果找到了 tmpfld.split(".")[0]  = Department
                                                if str(dv).strip():#先strwhere = {'DeptID__code__exact':'1'}
                                                    strwhere[str(f.name+"__"+tmpfld.split(".")[1]+"__exact")]=dv.strip()#
                                                   
                                else:  
                                    if tmpfld=="code" and model==Department:
                                        strwhere={}
                                        strwhere["code__exact"]=datash[row][tmpfldvalue][1].strip()
                                        break
                                    if tmpfld=="PIN" and model==Employee:
                                        strwhere={}
                                        strwhere["PIN__exact"]=str(int(datash[row][tmpfldvalue][1])).strip()
                                        break 
                                    #strwhere[str(tmpfld+"__exact")]=datash[row][tmpfldvalue][1]=dv.strip()
                            #print strwhere
                            #print(Q(**strwhere))
                            upobj=model.objects.filter(Q(**strwhere))
                        except Exception, e:
                            logger.error("%s"%e)
                        if upobj:
                            obj=upobj[0]
                        else:
                            obj=model()
                        currelobj=[]
                        for fld,value in fields.items():
                            relObj=""
                            isForeignKey=False
                            if fld.find(".")>0:                                                     #查找到需要保存关联字段
                                for nkey,val in rlfield.items():                                 #查找关联记录,更新或创建,并保存
                                    if nkey.__name__==fld.split(".")[0]:
                                        strfilter={}
                                        for f  in fields:                                       #查找关联表多个相应的字段,并生成表达式
                                            if f.find(".")>0 :
                                                if f.split(".")[0]==nkey.__name__:
                                                    if datash[row][value][0]==2:
                                                        tmpvalue=str(int(datash[row][fields[f]][1]))
                                                    else:
                                                        tmpvalue=datash[row][fields[f]][1]
                                                    if tmpvalue.strip():
                                                        if f.split(".")[1]=="code" and model==Employee: 
                                                            strfilter={}  #人员表,查找部门表时,当有选择部门名称时,只需要查找部门编号                                                       
                                                            strfilter[str(f.split(".")[1]+"__exact")]=tmpvalue.strip()
                                                            break
                                                        else:
                                                            strfilter[str(f.split(".")[1]+"__exact")]=tmpvalue.strip()
                                        if strfilter:
                                            #print "strfilter:",strfilter
                                            dir(nkey)
                                            relObj=nkey.objects.filter(Q(**strfilter))
                                            
                                        if len(relObj)<=0:                              #查找不到记录,生成新记录
        #                                    print "not found"
                                            
                                            if addrelate!=1:
                                                isSave=False
                                                break                                                           #跳出当前行
                                            else:
                                                relObj=nkey()      
                                                is_save_rel=False                       
                                                for tfld in fields.keys():
                                                    if tfld.find(".")>0:
                                                        if tfld.split(".")[0]==nkey.__name__:
                                                            if datash[row][fields[tfld]][0]==2:
                                                                t_value=str(int(datash[row][fields[tfld]][1]))
                                                            else:
                                                                t_value=datash[row][fields[tfld]][1]
                                                            #print "t_value,",t_value
                                                            if t_value.strip():
                                                                relObj.__setattr__(tfld.split(".")[1],t_value.strip())
                                                                is_save_rel=True
                                                if is_save_rel:
                                                    
                                                    relObj.save()
                                                    relrecs.append(relObj)
                                                    isForeignKey=True
                                                else:
                                                    relObj=None
                                        else:
                                            isForeignKey=True
                                            relObj=relObj[0]
                                            #print "find: %s "%relObj.__doc__
                                        currelobj.append(relObj)
                                        break
                            if not isSave:
                                break                   #跳过当前行
                            tobj=""
                            fieldname=""
                            #print"%s:%s"%(fld,datash[row][value][1])
                            if isForeignKey:
                                for f  in obj._meta.fields:    #查找字段是否是外键
                                    if isinstance(f,ForeignKey) and  f.rel.to.__name__==fld.split(".")[0]:
                                        for tobj in currelobj:
                                            if tobj==f.rel.to:
                                                break        
                                        fieldname=f.name
                                        
                                        break
                                #print "%s :%s"%(fieldname,tobj.pk)
                                obj.__setattr__(fieldname,tobj)
                            else:
                                if datash[row][value][0]==2:
                                    cellvalue=str(int(datash[row][value][1]))
                                else:
                                    cellvalue=datash[row][value][1]
                                #print "field :%s    value:%s"%(fld,cellvalue)
                                if cellvalue.strip():
                                    if fld=="PIN":
                                        model_emp=sys.modules['mysite.personnel.models.model_emp']
                                        settings=sys.modules['erp.settings']
                                        if len(str(cellvalue).strip())>getattr(settings,"PIN_WIDTH"):
                                            raise Exception(u"%s"%_(u"人员编号长度过长"))
                                        else:
                                            cellvalue=getattr(model_emp,"format_pin")(str(cellvalue.strip()))
                                    if fld=="code":
                                        dept=Department.objects.filter(code=cellvalue.strip())
                                        if dept:
                                            raise Exception(u"%s"%_(u'部门编号已存在'))
                                    obj.__setattr__(fld,cellvalue.strip())
                                    has_property=True
                        if isSave and has_property:
                            obj.save()
                            if(type(obj)==Employee):
                                if not obj.DeptID:#导入人员的时候 部门为空的时候 给默认的
                                    obj.__setattr__('DeptID',Department.objects.get(pk=1))
                                obj.__setattr__('attarea',(1,))
                                obj.save()
                            if(type(obj)==Department):
                                if obj.parent==None or obj.parent=="":                                        
                                     obj.parent_id=1
                                     obj.save()
                            objlist.append(obj)
                            
                except Exception,e:
                    #logger.error("%s"%e)
                    try:
                        error_list.append(str(row+1)+u"%s"%_(u" 行      ")+u"%s"%e)
                    except:
                        error_list.append(str(row+1))
                        pass
                    if errmode==1:                      # 按错误处理方式处理数据
                        continue                        
                    else:
                        raise
            
        else: