
Odoo中文社区可以通过以下两个域名访问:shine-it.net , odoo.net.cn
由于系统升迁的原因,本论坛部分较早期的内容存在格式和链接损坏失效的问题,并非本论坛系统本身的缺陷,望谅解
本社区没有维护任何QQ群讨论组,任何与本社区同名的QQ群讨论组的言论与本社区无关!
开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号
如果您登录系统碰到问题,请在微信公众号留言:
odoo中表单中添加按钮点击会出发保存表单中的内容?
-
我在odoo的开发中遇到自定义按钮的问题,就是我在表单中添加了一个按钮,用于其他自定义操作的,但是每次点击就会触发保存表单中的内容。我的目的是我点击自定义按钮后弹出一个选择层,选择后在点击odoo自己的保存按钮,是要达到这样一个效果,选择我还没有选择选项就已经把 表单中的内容就已经保存了,这样的话我不选择也保存了一个表单的内容,这个是不需要的。
-
taony_test_demo2 form taony_test_demo2.taony_test_demo2 -
主要是想知道js是在哪里定义写的,现在odoo里面不管在那个表单里面添加按钮都会,点击都会进行表单保存事件。
-
-
但是我在xml里面有写name的方法,然后是.py里面定义的,要是用widget那就不会出写在py文件中的事件了。我附上代码你看下。
-
@siyuan 但是我在xml里面有写name的方法,然后是.py里面定义的,要是用widget那就不会出写在py文件中的事件了。我附上代码你看下。
-
@siyuan
这个是xml文件中定义的button
另外button中的name就是py文件中模块下定义的方法,代码如下:
我目前只是为了测试,所以没有写如其他的操作,只是为了解决点击按钮保存表单数据的问题。 -
@siyuan 一般定义的name方法是用来操作模块数据的,我另外的方法代码:
-
-
odoo js框架 的修改属于比较中高级的,如果不是对最基本的xml+.py文件很熟悉的话,
我不介意你修改js (当然我不知道你有什么具体业务需要,导致目前的odoo框架满足不了需求) -
你在xml文件里面加button,走的肯定还是odoo js 框架默认的form 渲染流程,按钮点击会触发保存事件。
如果你不要触发保存事件.
A. 修改web模块里面form view 的保存机制,但除非你对odoo js 框架非常熟悉,不然不推荐,因为不知道会不会改出其他问题。
B. 参考附件上传widget,自己写个widget,和form view 本身独立开,自己控制widget上的按钮事件,这个和.py文件的通讯要自己解决。
(odoo js 框架本身有封装调用.py的方法,call_kw)如果你是odoo 初学者,我不介意你这么做;真有需要,最好找资深的二次开发的人员咨询(应该会收费)
-
-
@siyuan 非常感谢你,谢谢这么全面友好的建议,非常感谢。
-
我已经解决了这个bug,我是在odoo前端js基础上进行调整的,代码也非常简单,只是在找事件代码花费了一天多的时间,有需要的调整的朋友可以直接联系我。
-
@Siyuan 也非常感谢管理员@Siyuan 的帮助和建议,非常感谢。
-
你可以试试用
action
类型的按钮<button name='foo' type='action'/>
-
@siyuan 你好,请问下具体的js调用.py的方法是在哪里呢?或是具体的方法名知道吗?知道这个下次也好自定义按钮。
-
web/static/src/js/framework/model.js
/** * Call a method (over RPC) on the bound OpenERP model. * * @param {String} method name of the method to call * @param {Array} [args] positional arguments * @param {Object} [kwargs] keyword arguments * @param {Object} [options] additional options for the rpc() method * @returns {jQuery.Deferred<>} call result */ call: function (method, args, kwargs, options) { args = args || []; kwargs = kwargs || {}; if (!_.isArray(args)) { // call(method, kwargs) kwargs = args; args = []; } var call_kw = '/web/dataset/call_kw/' + this.name + '/' + method; return session.rpc(call_kw, { model: this.name, method: method, args: args, kwargs: kwargs }, options); },
-
@siyuan 非常感谢,我具体需要研究下,方便下次自定义使用,再次感谢。
-
@鲍永道
我想知道odoo服务端怎么跟前端联系的,还有就是前端通过attr设置的必填的选项,这个odoo是怎么检查的? -
@1234567 在 odoo中表单中添加按钮点击会出发保存表单中的内容? 中说:
@鲍永道
我想知道odoo服务端怎么跟前端联系的,还有就是前端通过attr设置的必填的选项,这个odoo是怎么检查的?服务器端跟前端联系?只有websocket这样的协议才有可能实现前后端的双向通信。http协议只有前端向后端发请求,并且是无状态的(就是下一个请求完全不知道上一个请求干了啥),没有反过来的
-
@digitalsatori
我表述的有问题。应该是前端如何向后端发送请求,还有odoo种简单实现按钮变色的js是怎样的,没有html不知如何处理?谢谢指导。