odoo表单相关的附件文档如果过多,逐个本地选择上传也是一种负担,比较好的方式是适配现代H5浏览器文件选择对话框原生的多选功能,这可以大大提高多文件操作效率
基础结构:file元素添加multiple属性
1 |
<input type="file" multiple="true" class="o_form_file_upload_input"/> |
事件支持:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
/** * author: i@renjie.me */ FormView.include({ render_buttons: function() { var self = this; var add_button = false; if(!self.$buttons){ add_button = true; } self._super.apply(self, arguments); if(add_button && self.$buttons){ // 文件选择事件 self.$buttons.find('.o_form_file_upload_input').change(function(evt){ var target = evt.target; var $form = $(target.form); var $file = $(target); var value = $file.val(); // 选择一个或多个文件 if($file.val() !== ''){ var $badge = $form.find(".badge"); var serialize = $form.serializeArray(); var files = $file.get(0).files; var count = files.length; var error = []; // 界面阻塞 framework.blockUI(); // 个数提示 $badge.text(count); // 并行异步上传 _.each(files, function(file, index){ var data = new FormData(); data.append('ufile',file); _.each(serialize, function(param){ data.append(param.name, param.value); }); $.ajax({ url: $form.attr("action"), type: 'POST', data: data, cache: false, processData: false, contentType: false, success: function(ret){ if(ret.error){ error.push(ret.error); } count--; // 上传完成 if(count == 0){ framework.unblockUI(); if(self.sidebar){ self.sidebar.do_attachement_update(self.dataset, self.datarecord.id, [{ "error": error.join("<br/>") }]); } } $badge.text(count ? count : ""); } }); }); $file.val(""); } }); } return self.$buttons; } }); |
这个上传多个工艺图片等确实有用。
才注意到,Odoo连接一切,您从微信连接一切到Odoo连接一切,我们需要您的帮助,有机会见面聊,我们在服装行业,http://www.springbegins.com/ , http://www.ie-it.net 。
谢谢。
您好,请教一个问题:
我有一个model中有一个binary字段,用来存放视频或音频文件,但是用binary上传后文件名没法显示,下载后的文件名是‘类名-id-字段名’,也没有文件后缀,看了很多东西也不知道该怎么处理,是否需要自定义widget来重写上传的方式?谢谢
model多定义一个char字段存储文件名,标准的binary widget支持这种双字段合成模式,表单视图例子:《field name=”binary” filename=”char”/》《field name=”char” invisible=”1″/》