导出事件excel part2
This commit is contained in:
parent
73b0ce7cb7
commit
cb33dcb021
|
@ -76,8 +76,10 @@ class NotifySettingsSerializer(CustomModelSerializer):
|
|||
|
||||
class EventSerializer(serializers.ModelSerializer):
|
||||
area_ = AreaSerializer(source='area', read_only=True)
|
||||
area_name = serializers.CharField(source='area.name', read_only=True)
|
||||
cates_ = EventCateSimpleSerializer(source='cates', read_only=True, many=True)
|
||||
employee_ = EmployeeSimpleSerializer(source='employee', read_only=True)
|
||||
employee_name = serializers.CharField(source='employee.name', read_only=True)
|
||||
operation_name = serializers.CharField(source='opl.operation.name', read_only=True)
|
||||
vchannel_ = TDeviceSimpleSerializer(source='vchannel', read_only=True)
|
||||
handle_user_name = serializers.CharField(source='handle_user.name', read_only=True)
|
||||
|
|
|
@ -30,6 +30,8 @@ obj_cate_dict = {'people': '人员', 'operation': '作业', 'other': '其他'}
|
|||
mark_dict = {10: '正常', 20: '误报'}
|
||||
|
||||
# Create your views here.
|
||||
|
||||
|
||||
class EventCateViewSet(CreateModelMixin, UpdateModelMixin, ListModelMixin, CustomGenericViewSet):
|
||||
perms_map = {'get': '*', 'put': 'event_cate.update', 'post': 'event_cate.create'}
|
||||
queryset = EventCate.objects.all()
|
||||
|
@ -152,7 +154,8 @@ class EventViewSet(ListModelMixin, RetrieveModelMixin, DestroyModelMixin, Custom
|
|||
{"name": "事件种类", "type": "str"},
|
||||
{"name": "发生区域", "type": "str"},
|
||||
{"name": "事件类型", "type": "str"},
|
||||
{"name": "事件对象", "type": "str"},
|
||||
{"name": "当事人", "type": "str"},
|
||||
{"name": "所属作业", "type": "str"},
|
||||
{"name": "发生时间", "type": "str"},
|
||||
{"name": "处理人", "type": "str"},
|
||||
{"name": "事件标记", "type": "str"},
|
||||
|
@ -165,24 +168,27 @@ class EventViewSet(ListModelMixin, RetrieveModelMixin, DestroyModelMixin, Custom
|
|||
odata = EventSerializer(queryset, many=True).data
|
||||
# 处理数据
|
||||
data = []
|
||||
|
||||
|
||||
for i in odata:
|
||||
cates_str = ''
|
||||
ep_str = ''
|
||||
for m in i['cates_']:
|
||||
cates_str = cates_str + '/' + m['name']
|
||||
cates_str = cates_str + m['name'] + '/'
|
||||
data.append(
|
||||
[
|
||||
cates_str,
|
||||
i['area_'].get('name', ''),
|
||||
obj_cate_dict[i['obj_cate']],
|
||||
'test',
|
||||
i['create_time'],
|
||||
i['handle_user_name'],
|
||||
mark_dict[i['mark']],
|
||||
i['global_img'],
|
||||
i['face_img']
|
||||
cates_str,
|
||||
i.get('area_name', None),
|
||||
obj_cate_dict[i['obj_cate']],
|
||||
i.get('employee_name', None),
|
||||
i.get('operation_name', None),
|
||||
i['create_time'],
|
||||
i.get('handle_user_name', None),
|
||||
mark_dict[i['mark']],
|
||||
i['global_img'],
|
||||
i['face_img']
|
||||
]
|
||||
)
|
||||
print(data)
|
||||
return Response({'path': export_excel_img(field_data, data, '事件记录')})
|
||||
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ from openpyxl import Workbook, styles
|
|||
from openpyxl.drawing.image import Image
|
||||
from openpyxl.utils import get_column_letter, column_index_from_string
|
||||
|
||||
|
||||
def len_byte(value):
|
||||
# 获取字符串长度,一个中文的长度为2
|
||||
length = len(value)
|
||||
|
@ -111,6 +112,7 @@ def export_excel(field_data: list, data: list, FileName: str):
|
|||
wbk.save(path_name)
|
||||
return path + FileNameF
|
||||
|
||||
|
||||
def export_excel_img(field_data: list, data: list, FileName: str):
|
||||
"""
|
||||
带有image的Excel导出
|
||||
|
@ -126,26 +128,26 @@ def export_excel_img(field_data: list, data: list, FileName: str):
|
|||
imgs = []
|
||||
|
||||
for index, value in enumerate(field_data):
|
||||
cell = ws.cell(column=index, row=0)
|
||||
cell = ws.cell(column=index+1, row=1)
|
||||
cell.value = value['name']
|
||||
cell.font = styles.Font(bold=True)
|
||||
letter = get_column_letter(index+1)
|
||||
value['letter'] = letter
|
||||
ws.column_dimensions[letter].width = 10 #修改列宽
|
||||
ws.column_dimensions[letter].width = 10 # 修改列宽
|
||||
if value['type'] == 'img':
|
||||
ws.column_dimensions[letter].width = 15 #修改列宽
|
||||
|
||||
ws.column_dimensions[letter].width = 15 # 修改列宽
|
||||
|
||||
for i1, v1 in enumerate(data):
|
||||
for i2, v2 in enumerate(v1):
|
||||
cell = ws.cell(column=i2, row=i1+1)
|
||||
cell = ws.cell(column=i2+1, row=i1+2)
|
||||
if v2 and field_data[i2]['type'] == 'img':
|
||||
ws.row_dimensions[i1+1].height = 70
|
||||
img = Image(settings.BASE_DIR + v2, width=90, height=90)
|
||||
imgs.append((img, field_data[i2]['letter'] +str(i1+1)))
|
||||
ws.row_dimensions[i1+2].height = 70
|
||||
img = Image(settings.BASE_DIR + v2)
|
||||
img.width, img.height = (90, 90)
|
||||
imgs.append((img, field_data[i2]['letter'] + str(i1+2)))
|
||||
else:
|
||||
cell.value = v2
|
||||
|
||||
|
||||
for i in imgs:
|
||||
ws.add_image(i[0], i[1])
|
||||
|
||||
|
@ -157,4 +159,4 @@ def export_excel_img(field_data: list, data: list, FileName: str):
|
|||
|
||||
path_name = os.path.join(pathRoot, FileNameF)
|
||||
wb.save(path_name)
|
||||
return path + FileNameF
|
||||
return path + FileNameF
|
||||
|
|
Loading…
Reference in New Issue