Open tonyu2019 opened 2 months ago
导入功能解决方案,我这里用的是模型管理,也就是说直接模型继承的fastapi-amis-admin中的ModelAdmin,导入功能在ModelAdmin中get_create_form方法中,在大概899行附近
for field in fields:
column = await self.get_list_column(request, self.parser.get_modelfield(field))
keys[column.name] = "${" + column.label + "}"
column.name = column.label
columns.append(column)
在百度的amis input-excel中有这样一句说明,需要保证 input-table 的 name 和 input-excel 一致,同时 columns 中的 name 也需要和 Excel 的列名一致。,所以很明显这里使用了column.label,也就是对应了我们model里定义的字段title(大部分为中文),这肯定和input-table中的name不一致了,自然预览里都是空白行了。
如果你想着input-table的name就用中文,那你上传的excel文件列标题也用中文和input-table对应,那么预览时肯定是没问题了,但是你提交时会报错,因为你提交的数据中都是[{"标题":"ss", "描述":"ss"},……]这样key为中文的数据,跟模型和数据库对应不上,肯定会出现字段验证失败。
所以解决方案还是要和模型/数据表保持一致,具体上述代码修改为:
for field in fields:
column = await self.get_list_column(request, self.parser.get_modelfield(field))
keys[column.name] = "${" + column.name + "}"
columns.append(column)
即可,这样你excel列字段和数据表保持一致,input-table既能解析成功,又可请求上传接口成功。
当然了你就用中文也行,按照官方的,但是你必须要上传接口请求前将字段转为数据接口可接受的就行,毕竟方法不止一种,根据自己的喜好来吧。
另外这个上传还是有些bug,比如title字段是字符串,那么你在excel中这一列全是数字,上传时不会转为字符串的,会直接提示验证失败,后续有时间再做这个兼容吧。
首先批量下载,某些时候我们想要的功能是仅导出选中的行,但是导出的依然是所有数据; excel导入,首先按照数据库字段导入,预览的时候就能发现了,被导入的行数是对的,但是数据全是空,导入成功也同样时空。如果按照model中字段的中文title去导入,预览的时候是正确的,但是点击确认导入会提示各个验证(数据库)字段不能为空。