Odoo - 创建演示时从 xml 访问字段
Odoo - access to a field from xml when demo creation
我正在 Odoo 中开发一个模块。我通过委托重载了 Odoo 的 class "project.task" 表单项目模块。
py文件
class Intervention(models.Model):
_name = "module.intervention"
_inherits = {
"project.task": "task_id"
}
### Fields
task_id = fields.Many2one(
"project.task",
ondelete="cascade",
required=True
)
### Overlord
@api.model
def create(self, vals)
# do lot of thing
intervention = super(Intervention, self).create(vals)
# link the object with 0ne2one relation
intervention.task_id.intervention_id = intervention
xml 文件
<record id="module.intervention0" model="module.intervention">
<field name="type_id" ref="module.interventionTypeDirect"/>
<field name="project_id" ref="module.project0"/>
<field name="user_id" ref="module.user0"/>
</record>
<record id="module.activity0" model="accoanunt.alytic.line">
<field name="unit_amount">2.5</field>
<field name="task_id" eval="ref('module.intervention0').task_id"/>
<field name="account_id" ref="module.project0"/>
<field name="user_id" ref="module.user0"/>
</record>
当我尝试访问一个字段时出现以下错误
"ParseError: 'int' object has no attribute 'task_id'"
我也尝试在 eval 中使用 'env'。
<field name="task_id" eval="env['module.intervention'].browse([ref('module.intervention0')], limit=1).task_id"/>
ParseError: "name 'env' is not defined" while parsing demo.xml
我的问题是:
如何在 xml 解析期间将对象的字段访问到 eval 表达式中?
关于:制作演示数据时如何访问字段?
在 oodoo 中,我们使用 ref in xml
和 env.ref in python
来引用演示数据 ID。
The syntax should be somthing like ref('module_name.xml_id')
Basically ref is an environment method returning the record
matching a provided external id:
这里module_name是你模块的名称(不是型号),xml_id是id创建的演示演示数据
<field name="company_id" ref="base.main_company"/>
此处我们正在访问在 base 模块中创建的演示数据 xml id main_company。
希望这可以帮助您理解 odoo 中的演示数据引用。
为了解决我的问题,我使用了一个错误的模型,他为分析帐户创建了一个外部 ID。
class AffairUpdateAnalyticAccount(models.Model):
_name = "module.affair_update_analytic_account"
@api.model
def create(self, vals):
# Generate an external ID
externalIds = self.env["ir.model.data"].search([('model', '=', 'module.affair')])
for externalId in externalIds:
if self.env["ir.model.data"].search_count([("name", "=", "%s_analytic_account" % externalId.name)]) == 0:
test = self.env["ir.model.data"].create({
'name' : "%s_analytic_account" % externalId.name,
'res_id': self.env["module.affair"].browse([externalId.res_id]).project_id.analytic_account_id.id,
'model': "analytic.account",
'module' : 'module'
})
return super(AffairUpdateAnalyticAccount, self).create(vals)
<!-- Affair record -->
<record id="module.affairUpdateAnalyticAccount" model="module.affair_update_analytic_account">
<field name="id">1</field>
</record>
<record id="module.activity0" model="account.analytic.line">
<field name="unit_amount" eval="2"/>
<field name="task_id" ref="module.intervention0_project_task"/>
<field name="account_id" ref="module.affair0_analytic_account"/>
<field name="user_id" ref="module.user0"/>
<field name="is_timesheet">True</field>
</record>
我正在 Odoo 中开发一个模块。我通过委托重载了 Odoo 的 class "project.task" 表单项目模块。
py文件
class Intervention(models.Model):
_name = "module.intervention"
_inherits = {
"project.task": "task_id"
}
### Fields
task_id = fields.Many2one(
"project.task",
ondelete="cascade",
required=True
)
### Overlord
@api.model
def create(self, vals)
# do lot of thing
intervention = super(Intervention, self).create(vals)
# link the object with 0ne2one relation
intervention.task_id.intervention_id = intervention
xml 文件
<record id="module.intervention0" model="module.intervention">
<field name="type_id" ref="module.interventionTypeDirect"/>
<field name="project_id" ref="module.project0"/>
<field name="user_id" ref="module.user0"/>
</record>
<record id="module.activity0" model="accoanunt.alytic.line">
<field name="unit_amount">2.5</field>
<field name="task_id" eval="ref('module.intervention0').task_id"/>
<field name="account_id" ref="module.project0"/>
<field name="user_id" ref="module.user0"/>
</record>
当我尝试访问一个字段时出现以下错误
"ParseError: 'int' object has no attribute 'task_id'"
我也尝试在 eval 中使用 'env'。
<field name="task_id" eval="env['module.intervention'].browse([ref('module.intervention0')], limit=1).task_id"/>
ParseError: "name 'env' is not defined" while parsing demo.xml
我的问题是:
如何在 xml 解析期间将对象的字段访问到 eval 表达式中?
关于:制作演示数据时如何访问字段?
在 oodoo 中,我们使用 ref in xml
和 env.ref in python
来引用演示数据 ID。
The syntax should be somthing like
ref('module_name.xml_id')
Basically ref is an environment method returning the record matching a provided external id:
这里module_name是你模块的名称(不是型号),xml_id是id创建的演示演示数据
<field name="company_id" ref="base.main_company"/>
此处我们正在访问在 base 模块中创建的演示数据 xml id main_company。
希望这可以帮助您理解 odoo 中的演示数据引用。
为了解决我的问题,我使用了一个错误的模型,他为分析帐户创建了一个外部 ID。
class AffairUpdateAnalyticAccount(models.Model):
_name = "module.affair_update_analytic_account"
@api.model
def create(self, vals):
# Generate an external ID
externalIds = self.env["ir.model.data"].search([('model', '=', 'module.affair')])
for externalId in externalIds:
if self.env["ir.model.data"].search_count([("name", "=", "%s_analytic_account" % externalId.name)]) == 0:
test = self.env["ir.model.data"].create({
'name' : "%s_analytic_account" % externalId.name,
'res_id': self.env["module.affair"].browse([externalId.res_id]).project_id.analytic_account_id.id,
'model': "analytic.account",
'module' : 'module'
})
return super(AffairUpdateAnalyticAccount, self).create(vals)
<!-- Affair record -->
<record id="module.affairUpdateAnalyticAccount" model="module.affair_update_analytic_account">
<field name="id">1</field>
</record>
<record id="module.activity0" model="account.analytic.line">
<field name="unit_amount" eval="2"/>
<field name="task_id" ref="module.intervention0_project_task"/>
<field name="account_id" ref="module.affair0_analytic_account"/>
<field name="user_id" ref="module.user0"/>
<field name="is_timesheet">True</field>
</record>