2016-05-04 6 views
3

私はOdooでモジュールを開発しています。私は委任によってクラス"project.task"フォームのOdooのプロジェクトモジュールをオーバーロードします。Odoo - デモ作成時にXMLからのフィールドへのアクセス

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式にオブジェクトのフィールドにアクセスする方法は?

+0

任意の解決策はありますか? –

答えて

1

私の問題を解決するために、彼はanalyticsアカウントの外部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> 
0

関連情報:デモデータ作成中にフィールドにアクセスするにはどうすればよいですか?

oodooではデモデータIDを参照するためにref in xmlenv.ref in pythonを使用しています。

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:

ここモジュール名は(ないモ​​デル)あなたのモジュールの名前で、xml_idは、作成したデモのデモデータのID

for exampleです。

<field name="company_id" ref="base.main_company"/> 

ここでは、ベースモジュールで作成されたデモデータのXML ID main_companyにアクセスしています。

希望すると、これはodooのデモデータ参照を理解するのに役立ちます。

+0

はい、私は、私は外部IDで取得するオブジェクトのフィールドで値を設定しようとしていることを理解しています。オブジェクト自体ではなく、フィールドに格納されます。 – olive007

関連する問題