fix(export): convert int type to str type when export data

pull/64/head
Angelo 2022-06-17 09:24:28 +08:00
parent afa5864717
commit 78e95f764a
1 changed files with 22 additions and 15 deletions

View File

@ -61,29 +61,33 @@ class ImportSerializerMixin:
] = f'attachment;filename={quote(str(f"导入{get_verbose_name(queryset)}模板.xlsx"))}' ] = f'attachment;filename={quote(str(f"导入{get_verbose_name(queryset)}模板.xlsx"))}'
wb = Workbook() wb = Workbook()
ws1 = wb.create_sheet("data", 1) ws1 = wb.create_sheet("data", 1)
ws1.sheet_state = 'hidden' ws1.sheet_state = "hidden"
ws = wb.active ws = wb.active
row = get_column_letter(len(self.import_field_dict) + 1) row = get_column_letter(len(self.import_field_dict) + 1)
column = 10 column = 10
header_data = ["序号", ] header_data = [
"序号",
]
validation_data_dict = {} validation_data_dict = {}
for index, ele in enumerate(self.import_field_dict.values()): for index, ele in enumerate(self.import_field_dict.values()):
if isinstance(ele, dict): if isinstance(ele, dict):
header_data.append(ele.get('title')) header_data.append(ele.get("title"))
choices = ele.get('choices', {}) choices = ele.get("choices", {})
if choices.get('data'): if choices.get("data"):
data_list = [] data_list = []
data_list.extend(choices.get('data').keys()) data_list.extend(choices.get("data").keys())
validation_data_dict[ele.get('title')] = data_list validation_data_dict[ele.get("title")] = data_list
elif choices.get('queryset') and choices.get('values_name'): elif choices.get("queryset") and choices.get("values_name"):
data_list = choices.get('queryset').values_list(choices.get('values_name'), flat=True) data_list = choices.get("queryset").values_list(choices.get("values_name"), flat=True)
validation_data_dict[ele.get('title')] = list(data_list) validation_data_dict[ele.get("title")] = list(data_list)
else: else:
continue continue
column_letter = get_column_letter(len(validation_data_dict)) column_letter = get_column_letter(len(validation_data_dict))
dv = DataValidation(type="list", dv = DataValidation(
formula1=f"{quote_sheetname('data')}!${column_letter}$2:${column_letter}${len(validation_data_dict[ele.get('title')]) + 1}", type="list",
allow_blank=True) formula1=f"{quote_sheetname('data')}!${column_letter}$2:${column_letter}${len(validation_data_dict[ele.get('title')]) + 1}",
allow_blank=True,
)
ws.add_data_validation(dv) ws.add_data_validation(dv)
dv.add(f"{get_column_letter(index + 2)}2:{get_column_letter(index + 2)}1048576") dv.add(f"{get_column_letter(index + 2)}2:{get_column_letter(index + 2)}1048576")
else: else:
@ -117,8 +121,9 @@ class ImportSerializerMixin:
queryset = self.filter_queryset(self.get_queryset()) queryset = self.filter_queryset(self.get_queryset())
# 获取多对多字段 # 获取多对多字段
m2m_fields = [ m2m_fields = [
ele.attname for ele in queryset.model._meta.get_fields() if ele.attname
hasattr(ele, "many_to_many") and ele.many_to_many == True for ele in queryset.model._meta.get_fields()
if hasattr(ele, "many_to_many") and ele.many_to_many == True
] ]
data = import_to_data(request.data.get("url"), self.import_field_dict, m2m_fields) data = import_to_data(request.data.get("url"), self.import_field_dict, m2m_fields)
unique_list = [ unique_list = [
@ -193,6 +198,8 @@ class ExportSerializerMixin:
result = "" result = ""
elif result is False: elif result is False:
result = "" result = ""
if isinstance(result, int):
result = str(result)
# 计算最大列宽度 # 计算最大列宽度
result_column_width = self.get_string_len(result) result_column_width = self.get_string_len(result)
if result_column_width > df_len_max[inx + 1]: if result_column_width > df_len_max[inx + 1]: