GoAdminGroup/go-admin 表单 form.Multifile 编辑时候保存,内容被清空问题

最近使用了GoAdminGroup/go-admin 搭建后台,创建项目很快,很方便,基本的内容后台管理功能都能实现。但是遇到了一个问题,就是使用 form.Multifile 的字段, 编辑时候,如果不上传新的文件,点击保存就会出现字段内容被清空的问题。


在 git issue 里面发现有人提出过,她那个是旧的版本, 新增后编辑直接不显示图片,作者给出了解决方案(https://github.com/GoAdminGroup/go-admin/issues/257),并且新版已经解决了新增后编辑不显示图片问题。


我现在的问题就是在他那个解决方案后面衍生出来的问题,具体原因应该渲染模版时候发生了一些错误,导致模版内容显示有误,然后保存时候没有正确将默认值发送到后台。问题但是不知道未来版本会不会修复。这里为了赶项目进度,又不想自己修改源码,用简单的方法解决下。


新增页面

编辑页面

解决方法

在更新前校验前台传过来的是不是空值,如果是空值,从数据库里面查询原来的值

formList.AddField("图片", "images", db.Varchar, form.Multifile).
   FieldOptionExt(map[string]interface{}{
      "maxFileCount": 10,
   }).
   FieldHelpMsg("图片比例请上传 15/9").
   // 多图编辑消失问题,作者说修复了(https://github.com/GoAdminGroup/go-admin/issues/257),但是我这里不好使,有可能哪里配置错了,本人水平有限并没有在官网并找到示例
   // 为了实现业务,只能在更新前校验前台传过来的是不是空值,如果是空值,从数据库里面查询原来的值
   FieldPostFilterFn(func(value types.PostFieldModel) interface{} {
      var str string
      if value.Value == nil {
         // 从数据库内获取原来的数据
         images,err := db.WithDriver(globalConn).Table("toilet").Select("images").Where("id", "=", value.Row["id"]).First()
         if err != nil {
            return errors.New("数据库内没有这条消息")
         }
         return images["images"]
      } else {
         // 处理新上传的数据,拼接成 form.Multifile 可显示的字符串格式
         images := value.Value
         for i:=0; i<len(images); i++ {
            str += images[i]
            if i < len(images)-1 {
               str += ","
            }
         }
         return str
      }
   })









2762
0
3年前