跳转至内容

Odoo 开发与实施交流

No decsciption available
2.3k 主题 10.5k 帖子
  • 有没有什么关于ODOO高并发,速度慢这方面的解决方案

    7
    0 赞同
    7 帖子
    8k 浏览

    目前用odoo11,物流。速度也很慢,天天发愁啊。

  • odoo10中怎样控制向导的关闭??

    5
    0 赞同
    5 帖子
    1k 浏览
    S

    @ccff 如果用的是 TransientModel,

    系统好像会自删除记录,

    理论上你这套流程可能会存在一个问题,

    打开一个向导后,

    很长一段时间不操作,

    然后进行接下来的操作的时候就会报记录找不到的错误

  • odoo11嵌入自定义页面

    9
    1 赞同
    9 帖子
    4k 浏览

    自定义页面开发只是在odoo不能实现的功能下才这么做的,我的分享中的代码就是odoo的功能不能实现业务需求,只能另外开发,但是又要在一个系统中使用,所以才这么做的。
    要是odoo自己能实现的,就没有必要自定义啊。

  • odoo10 8069端口打不开。

    4
    0 赞同
    4 帖子
    1k 浏览
    S

    @joshua 今天早上重新开电脑就好了,莫名其妙。

  • 0 赞同
    4 帖子
    1k 浏览
    S

    卸载模块之前把数据库备份一下,

    搭一个卸载前的一模一样的环境不就得了。

  • 有偿求助,更改odoo11 销售模块下的消息通知内容显示样式

    7
    0 赞同
    7 帖子
    1k 浏览
    1

    @鲍永道 状态是自定义的 ,鼠标移动某个状态就动态显示出这个状态的操作信息

  • 0 赞同
    1 帖子
    473 浏览
    尚无回复
  • Odoo 警告 - 访问错误

    2
    0 赞同
    2 帖子
    1k 浏览
    静静

    字面理解就是,没权限。具体原因就不知道了。二开代码,可能出错的地方多种多样,真心猜不到。

  • 3图中 横向显示 指的是左侧 订单状态 这块

    1
    0 赞同
    1 帖子
    505 浏览
    尚无回复
  • odoo10到odoo11的数据恢复

    1
    0 赞同
    1 帖子
    462 浏览
    尚无回复
  • Odoo Smart Button

    3
    1 赞同
    3 帖子
    784 浏览

    看这样文章很舒服。感谢分享。

  • 如何实现Odoo调用摄像头拍照并保存到模型到字段?

    1
    0 赞同
    1 帖子
    532 浏览
    尚无回复
  • button 根据字段是否有值显示不同的string

    11
    0 赞同
    11 帖子
    1k 浏览
    H

    @静静
    是这个WidgetButton的render方法吧?那是renderElement()方法还是rendor_value()方法,有什么区别?

    core.form_tag_registry.add('button', WidgetButton); return { FieldBoolean: FieldBoolean, FieldChar: FieldChar, FieldEmail: FieldEmail, FieldFloat: FieldFloat, FieldRadio: FieldRadio, FieldStatus: FieldStatus, FieldMonetary: FieldMonetary, WidgetButton: WidgetButton };
  • 分享一个制作自己的Odoo安装包的方法

    1
    0 赞同
    1 帖子
    697 浏览
    静静

    :clapping_hands: :clapping_hands: :clapping_hands:

  • [已解决]某个字段显示背景颜色

    4
    0 赞同
    4 帖子
    836 浏览

    @hui 在 [已解决]某个字段显示背景颜色 中说:

    https://github.com/OCA/web/tree/11.0/web_tree_dynamic_colored_field

    不错的。

  • [已解决]odoo tree加button点击弹 wizard

    2
    0 赞同
    2 帖子
    651 浏览
    H

    @hui
    不能在字段上直接写class='btn',必须重新写一个button,然后type='object',就可以执行对应的name的方法了。

    <field name="remark"/> <button class="btn btn-xs" string="Add" name="update_remark" type="object" attrs="{'invisible': [('remark', '!=', False)]}"/>
  • odoo11.0时间差问题,求不更改源代码的解决方式

    15
    0 赞同
    15 帖子
    2k 浏览

    @digitalsatori @Siyuan 谢谢,我问题暂时解决了,你的问题我再考虑一下。刚刚我又有了其他想法。

  • [已解决]action context传值

    4
    0 赞同
    4 帖子
    618 浏览
    H

    @siyuan 你说的对。正确的如下:
    只要这个context里面的key是default_xx,xx是wizard中的字段就可以

    def show_remark(self): remark = self.remark context = dict(self._context or {}) context['default_remark'] = remark action = self.env.ref('sps_project.action_project_remark').read()[0] action.update(context=context) return action
  • tree 加widget=‘kanban_state_selection’

    2
    0 赞同
    2 帖子
    639 浏览
    H

    @hui
    1、这个widget在odoo10的时候还是只是在project模块中自定义的一个widget,而且只是在form,kanban视图中有效果,list视图没有效果的。
    2、这个widget不能通用的,odoo11好像可以通用了。

    我抄写官方的代码,在我需要的模块自定义了一个status_selection的widget,测试效果可以。主要的js代码如下:

    代码中50-59行代码,就是根据自定义的selection的key进行颜色的定义。

    这个不是很懂,也不知道哪些是多余的,还有就是这个template用原来的好像不行,复制了一份的。:face_with_stuck-out_tongue_winking_eye:

    odoo.define('sps_project.include_form_widget', function (require) { 'use strict'; var ajax = require('web.ajax'); var core = require('web.core'); var crash_manager = require('web.crash_manager'); var data = require('web.data'); var datepicker = require('web.datepicker'); var dom_utils = require('web.dom_utils'); var Priority = require('web.Priority'); var ProgressBar = require('web.ProgressBar'); var Dialog = require('web.Dialog'); var common = require('web.form_common'); var formats = require('web.formats'); var framework = require('web.framework'); var Model = require('web.DataModel'); var pyeval = require('web.pyeval'); var session = require('web.session'); var utils = require('web.utils'); var _t = core._t; var QWeb = core.qweb; var StatusSelection = common.AbstractField.extend({ template: "FormSelection", events: { 'click a': function(e) { e.preventDefault(); }, 'mouseup a': function(e) { e.stopPropagation(); }, 'click li': 'set_kanban_selection' }, start: function () { // hook on form view content changed: recompute the states, because it may be related to the current stage this.view.on('view_content_has_changed', this, function () { this.render_value(); }); return this._super(); }, prepare_dropdown_selection: function() { var self = this; var _data = []; _.map(self.field.selection || [], function(selection_item) { var value = { 'name': selection_item[0], 'tooltip': selection_item[1], }; if (selection_item[0] === 'initial') { value.state_class = 'oe_kanban_status_grey'; value.state_name = selection_item[1]; } else if (selection_item[0] === '1st review') { value.state_class = 'oe_kanban_status_green'; value.state_name = selection_item[1]; } else { value.state_class = 'oe_kanban_status_red'; value.state_name = selection_item[1]; } _data.push(value); }); return _data; }, render_value: function() { this._super(); this.states = this.prepare_dropdown_selection(); var self = this; // Adapt "FormSelection" var current_state = _.find(this.states, function(state) { return state.name === self.get('value'); }); this.$('.oe_kanban_status') .removeClass('oe_kanban_status_red oe_kanban_status_green') .addClass(current_state.state_class); // Render "FormSelection.Items" and move it into "FormSelection" var $items = $(QWeb.render('FormSelection.items', { states: _.without(this.states, current_state) })); var $dropdown = this.$el.find('.dropdown-menu'); $dropdown.children().remove(); // remove old items $items.appendTo($dropdown); }, /* setting the value: in view mode, perform an asynchronous call and reload the form view; in edit mode, use set_value to save the new value that will be written when saving the record. */ set_kanban_selection: function (ev) { var self = this; ev.preventDefault(); var li = $(ev.target).closest('li'); if (li.length) { var value = String(li.data('value')); if (this.view.get('actual_mode') === 'view') { var write_values = {}; write_values[self.name] = value; return this.view.dataset._model.call( 'write', [ [this.view.datarecord.id], write_values, self.view.dataset.get_context() ]).done(self.reload_record.bind(self)); } else { return this.set_value(value); } } }, reload_record: function() { this.view.reload(); }, }); core.form_widget_registry.add('status_selection', StatusSelection); return { StatusSelection: StatusSelection, }; });
  • 将odoo设置中的debug选项设置在菜单栏上

    7
    0 赞同
    7 帖子
    2k 浏览

    @judy_zh 嗯嗯,别客气,大家多交流多交流。