管理后台批量导入User模型和EmployeeUser模型
其中User模型和EmployeeUser模型是1VS1关系。
utils.py先新增User模型,再新增EmployeeUser模型
from openpyxl import Workbook,load_workbook
from openpyxl.utils import get_column_letter
from .models import *
# 批量上传User和EmployeeUser
# 没有完工,先做echarts看板
def import_EmployeeUser(self, request, obj, change):
wb = load_workbook(filename=obj.file.path)
ws = wb.get_sheet_names()
ws = wb.get_sheet_by_name(ws[0])
max_row = ws.max_row
headers = ['username', 'password',
'department', 'employeename','employeeid','title','role', 'score_ci','score_total','score_used','score_left',]
lists = []
for row in range(2, max_row+1):
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)
print('lists',lists)
sqllist = []
# 新增user模型
for cell in lists:
username = cell['username']
password = cell['password']
sql = User.objects.get_or_create(
username = username,
password=password,
)
# 新增EmployeeUser模型
for cell in lists:
username = cell['username']
password = cell['password']
department = cell['department']
employeename = cell['employeename']
employeeid = cell['employeeid']
title = cell['title']
role = cell['role']
score_ci = cell['score_ci']
score_total = cell['score_total']
score_used = cell['score_used']
score_left = cell['score_left']
user = User.objects.get(username = username,password = password)
sql = EmployeeUser(
user = user,
department=department,
employeename=employeename,
employeeid=employeeid,
title=title,
role=role,
score_ci=score_ci,
score_total=score_total,
score_used=score_used,
score_left=score_left,
)
sqllist.append(sql)
print('sqllist',sqllist)
EmployeeUser.objects.bulk_create(sqllist)
print('上传成功')
namelist.xlsx
models.py
class EmployeeUser(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE,related_name='employeeuser')
department = models.CharField(blank=True, null=True,choices=DEPT_TYPE, max_length=100, verbose_name=u'部门')
employeename = models.CharField(max_length=135, blank=True, null=True,verbose_name=u'姓名')
employeeid = models.CharField(max_length=135, blank=True, null=True,verbose_name=u'工号')
title = models.CharField(blank=True, null=True,max_length=100, verbose_name=u'职务')
role = models.CharField(blank=True, null=True,max_length=100, choices=ROLE_TYPE,verbose_name=u'角色')
score_ci = models.IntegerField(blank=True, null=True, default=0, verbose_name=u'CI调整的积分')
score_total = models.IntegerField(blank=True, null=True, default=0, verbose_name=u'共获取的积分')
score_used = models.IntegerField(blank=True, null=True, default=0, verbose_name=u'已使用的积分')
score_left = models.IntegerField(blank=True, null=True, default=0, verbose_name=u'剩余积分')
class Meta:
verbose_name = u'员工和积分'
verbose_name_plural = u'员工和积分'
def __str__(self):
return self.user.username + "拓展信息"
# 定义后台上传文件的接口
class Import_EmployeeUser(models.Model):
file = models.FileField(upload_to='file')
name = models.CharField(max_length=50,verbose_name=r'文件名')
class Meta:
ordering = ['name']
def __str__(self):
return self.name