django-读取上传的excel文件,将数据存入数据库

 

 

 

 后端代码如下:

 1 def upload_device(request):
 2     """文件上传"""
 3     nowTime = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
 4     if request.method == 'POST':
 5         f = request.FILES.get('file')
 6         excel_type = f.name.split('.')[-1]
 7         if excel_type in ['xls']:
 8             # 开始解析上传的excel表格
 9             wb = xlrd.open_workbook(filename=None, file_contents=f.read())
10             table = wb.sheets()[0]
11             rows = table.nrows  # 总行数
12             for i in range(1, rows):
13                 row_values = table.row_values(i)
14                 if (row_values[0] != "" and row_values[1] != "" and row_values[2] != "" and row_values[
15                     3] != "" and row_values[4] != "" and row_values[5] != "" and row_values[7] != "" and
16                         row_values[8] != ""):
17                     pass
18                 else:
19                     return JsonResponse("" + str(i) + "行除手机号外其余项均不能为空", safe=False,
20                                         json_dumps_params={'ensure_ascii': False})
21             with transaction.atomic():  # 控制数据库事务交易
22                 for j in range(1, rows):
23                     row_values = table.row_values(j)
24                     device_asset_num = row_values[5]
25                     device_phone_num = row_values[6]
26                     if isinstance(device_asset_num, str):
27                         device_asset_num = device_asset_num
28                     elif isinstance(device_asset_num, float) and device_asset_num.is_integer():
29                         device_asset_num = int(float(device_asset_num))
30                     else:
31                         pass
32                     if device_phone_num == "" or device_phone_num == "":
33                         device_phone_numb = ""
34                     elif isinstance(device_phone_num, str):
35                         device_phone_num = device_phone_num
36                     elif isinstance(device_phone_num, float):
37                         device_phone_num = int(float(device_phone_num))
38                     else:
39                         pass
40                     device_by_asset_num = DeviceInfo.objects.filter(
41                         device_asset_num=device_asset_num)
42                     if device_by_asset_num.exists():
43                         #使用JsonResponse都需要添加 json_dumps_params={'ensure_ascii':False} 否则显示不是UTF-8格式.
44                         # 如果是列表格式,使用JsonResponse,需要添加safe=False
45                         return JsonResponse("资产编号%s已存在" % (device_asset_num), safe=False,
46                                             json_dumps_params={'ensure_ascii': False})
47                     else:
48                         DeviceInfo.objects.create(center_name=row_values[0],
49                                                      device_name=row_values[1],
50                                                      device_system=row_values[2].lower(),
51                                                      device_factory=row_values[3],
52                                                      device_system_version=row_values[4],
53                                                      device_asset_num=device_asset_num,
54                                                      device_phone_num=device_phone_num,
55                                                      device_recipient=row_values[7],
56                                                      device_user=row_values[8],
57                                                      creator=row_values[7],
58                                                      create_date=nowTime,
59                                                      update_data=nowTime
60                                                      )
61                         CirculationInfo.objects.create(
62                             device_asset_num=DeviceInfo.objects.filter(device_asset_num=device_asset_num)[0],
63                             device_user=row_values[8],
64                             creator=row_values[7],
65                             created_date=nowTime,
66                             update_data=nowTime
67                         )
68         else:
69             return JsonResponse("文件类型错误", safe=False, json_dumps_params={'ensure_ascii': False})
70     return redirect('/devices_list')

 

posted on 2021-09-25 19:36  cherry_ning  阅读(1156)  评论(0)    收藏  举报

导航