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

odoo Inheriting Product Template using delegation, need to change default value for categ_id on form

正在委托产品模板继承。在窗体视图中,我放置字段 categ_id。这默认为 'All',我希望它默认指向不同的类别。我尝试了以下方法,

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

成功将下拉列表过滤为我想要的类别,但 'All' 仍显示为默认类别。

接下来,我尝试将上下文放在 window 操作中,并将字段设置为

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

字段categ_id定义中,default=_get_default_category_id是调试器发出的问题。它正在绕过以下行,

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

书上说继承模型的访问权限在新模型中不可用?所以我也尝试覆盖该功能,但它没有用(这甚至可能吗,因为这是委托?)

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

请注意,字段 categ 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函数。即指定类别为paper

经过更多研究,更新 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

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