odoo使用委托继承产品模板,需要更改表单上categ_id的默认值

Posted

技术标签:

【中文标题】odoo使用委托继承产品模板,需要更改表单上categ_id的默认值【英文标题】:odoo Inheriting Product Template using delegation, need to change default value for categ_id on form 【发布时间】:2020-06-18 17:59:50 【问题描述】:

通过委托产品模板继承。在表单视图中,我放置了 categ_id 字段。这默认为“全部”,我希望它默认指向不同的类别。我尝试了以下方法,

<field name="categ_id" domain="[('name', '=', 'Paper')]"/>

成功地将下拉列表过滤为我想要的类别,但“全部”仍显示为默认值。

接下来,我尝试将上下文放置在窗口操作和具有变化的字段中,例如

context="'default_categ_id':%(pse.product_category_materials_paper)d"
context="'default_categ_id':'Paper'"
context="'default_categ_name':'Paper'"

在字段 categ_id 定义中,default=the _get_default_category_id 是来自调试器的问题。它绕过了以下行,

return self._context.get('categ_id') or self._context.get('default_categ_id')

书上说在新模型中无法访问继承模型?所以我也尝试了覆盖该函数,但它没有工作(这甚至可能,因为这是委托?)

任何指针都会有所帮助。 谢谢!

【问题讨论】:

【参考方案1】:

经过一番研究,更新 default_get 方法正在起作用。

@api.model
def default_get(self, vals):
   res = super(Paper, self).default_get(vals)
   categories = self.env['product.category'].search([('name', '=', 'Paper')])
   if categories:
       res.update('categ_id': categories[0].id)
   return res

不过,如果纸张不存在,仍需要进行错误检查。将其指向产品模板“全部”默认值。

【讨论】:

【参考方案2】:

请注意,字段类别 id 具有在基础中运行的默认功能。你可以改变

categ_id = fields.Many2one(
    'product.category', 'Internal Category',
    change_default=True, default=_get_default_category_custom,
    required=True, help="Select category for the current product")

请随意编写 _get_default_category_custom 函数。也就是将类别指定为纸张。

【讨论】:

以上是关于odoo使用委托继承产品模板,需要更改表单上categ_id的默认值的主要内容,如果未能解决你的问题,请参考以下文章

An odoo功能介绍(13) 公司如何定义销售的订阅产品

Odoo 13:如何为同一产品使用每个公司的不同重量单位计量单位

35.Odoo产品分析 – 工具板块 – 午餐管理

odoo模板中t标签的用法

46.Odoo产品分析 – 定制板块 – 为业务自定义odoo

odoo常见问题