Odoo 12-使用default_foo全局变量(res.config.settings)



从这个网站上的各种帖子中,我有以下代码(在分隔符下面(,用于创建全局变量。然而,所有在线帮助https://odoo-development.readthedocs.io/en/latest/dev/py/res.config.settings.html#default-xxx在设置方法中有TODO。

问题的第一部分是,如何从清单中引用为data/pse_data.xml的启动文件中设置default_paper_markup?我想要这套,这样任何未来的进口都可以从中受益。

问题的第二部分是当我想在公式
中应用default_paper_markup时,即total_price=total_cost*default_paper.markup
我是使用default_paper_markup(因为我认为default_*字段不需要get_value((/set_value?将其复制到估计(如销售订单(行项目的字段中也是如此,这样它就会成为历史?

更新:来源https://github.com/odoo/odoo/blob/11.0/odoo/addons/base/res/res_config.py,"方法default_get检索反映字段当前状态的值,如'default_XXX'、'group_XXX'和'module_XXX'。它还调用名称以'get_default_'开头的所有方法;可以定义这些方法为其他字段提供当前值。"这是否意味着在执行计算的方法中使用default_get(how?)get_default_paper_markup(how?)之前,我应该将其写入局部变量?/UPDATE

问题的第三部分附带说明,在所有res_config_settings中搜索Odoo 12 CE以查找default_。*不返回任何结果。这是现在已弃用还是未使用?我应该不使用它而只使用函数吗?例如,使用相关字段,在以下内容中搜索quotation_validity_days:插件/sale/models/


res_config_settings.py

class ResConfigSettings(models.TransientModel):
_inherit = 'res.config.settings'
default_paper_markup = fields.Float(
default_model='pse.paper'
)

res_config_settings_views.xml

<record id="res_config_settings_view_form" model="ir.ui.view">
<field name="name">res.config.settings.view.form.inherit.pse</field>
<field name="model">res.config.settings</field>
<field name="priority" eval="70"/>
<field name="inherit_id" ref="base.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[hasclass('settings')]" position="inside">
<div class="app_settings_block" data-string="PSE Data-String" string="PSE" data-key="pse" groups="pse.group_pse_manager">
<h2>Paper</h2>
<div class="row mt16 o_settings_container">
<div class="col-xs-12 col-md-6 o_setting_box">
<div class="o_setting_right_pane">
<label for="default_paper_markup"/>
<div class="row">
<div class="text-muted col-lg-8">
Markup of cost for reselling paper
</div>
</div>
<div class="content-group">
<div class="mt16">
<field name="default_paper_markup" class="o_light_label"/>
</div>
</div>
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
<record id="pse_config_settings_action" model="ir.actions.act_window">
<field name="name">Settings</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.config.settings</field>
<field name="view_mode">form</field>
<field name="target">inline</field>
<field name="context">{'module' : 'pse'}</field>
</record>
<menuitem id="pse_menu_configuration"
name="Settings"
parent="menu_pse_configuration"
sequence="0"
action="pse_config_settings_action"
groups="base.group_system"/>
</odoo>

my_model.py

paper_markup = fields.Float(string='Markup')

代码正在进行以下更新。为了继续前进,我暂时选择了另一条路线。我会回到这个问题上来,因为我仍然想理解。因此,任何其他答案都将不胜感激。

res_config_settings.py

class ResConfigSettings(models.TransientModel):
_inherit = 'res.config.settings'
paper_markup = fields.Float(
string='Markup',
digits=(2, 2),
default=1.0
)
@api.multi
def get_values(self):
res = super(ResConfigSettings, self).get_values()
res.update(
paper_markup=float(self.env['ir.config_parameter'].sudo().get_param('pse.paper_markup'))
)
return res
def set_values(self):
super(ResConfigSettings, self).set_values()
self.env['ir.config_parameter'].sudo().set_param('pse.paper_markup', Decimal(self.paper_markup))

res_config_settings_views.xml

...
<field name="paper_markup" class="o_light_label"/>
...

以下答案第一部分以这种方式做事。(记得添加到清单中(
module_data.xml

<!-- Settings to enable -->
<record id="config_pse_paper_markup" model="ir.config_parameter">
<field name="key">pse.paper_markup</field>
<field name="value">1.25</field>
</record>

以下答案第二部分以这种方式做事
(模块名称(.py

markup = fields.Float(
string='Cost Markup',
help="The markup to be applied to the cost.",
compute='_compute_markup',
store=False
)
price1 = fields.Float(
string='The Price',
help="The resell price for paper.",
compute='_compute_price1',
store=False,
inverse='_inverse_price1',
search='_search_price1'
)
# ***** Compute and search fields, in the same order of fields declaration *****
@api.multi
def _compute_markup(self):
for record in self:
record.markup = float(self.env['ir.config_parameter'].sudo().get_param('pse.paper_markup'))
@api.multi
@api.depends('markup')
def _compute_price1(self):
for record in self:
record.price1 = record.standard_price * record.markup

最新更新