Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

excel批量下载和导入的问题 #176

Open
tonyu2019 opened this issue Jul 12, 2024 · 1 comment
Open

excel批量下载和导入的问题 #176

tonyu2019 opened this issue Jul 12, 2024 · 1 comment

Comments

@tonyu2019
Copy link

首先批量下载,某些时候我们想要的功能是仅导出选中的行,但是导出的依然是所有数据;
excel导入,首先按照数据库字段导入,预览的时候就能发现了,被导入的行数是对的,但是数据全是空,导入成功也同样时空。如果按照model中字段的中文title去导入,预览的时候是正确的,但是点击确认导入会提示各个验证(数据库)字段不能为空。

@tonyu2019
Copy link
Author

导入功能解决方案,我这里用的是模型管理,也就是说直接模型继承的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中这一列全是数字,上传时不会转为字符串的,会直接提示验证失败,后续有时间再做这个兼容吧。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant