2017-01-25 6 views
1
    <field name="salary_month"/> 
        <field name="earning_type_id"> 
         <tree editable="bottom"> 
          <field name="earnings_type" /> 
          <field name="based_on" on_change="calc_amount(based_on,salary_month)" /> 
          <field name="amount" /> 
          <field name="total" /> 
         </tree> 
        </field> 

上記の条件で私は2つの変数を持っています。salary_monthもう1つはone2many変数earning_type_idです。 earning_type_idの内部では、salary_monthの値を渡す必要があります。その変数は、未定義の変数salary_monthを示しています。どのようにodooのonchange one2many変数で値を渡すのですか?

class employee_payroll_earnings(models.Model):  
    _name = 'employee.payroll.earnings' 

    earnings_id=fields.Integer() 
    earnings_type=fields.Many2one('earnings.type','Earnings') 
    based_on=fields.Selection([('fixed','fixed'),('percentage','percentage')], 'Based On') 
    amount=fields.Float('Amount or Percentage') 
    total=fields.Float('Total') 

    @api.multi 
    def calc_amount(self,based_on,salary_month): 
     print based_on 
     print salary_month 

class hr_employee(models.Model): 
    _inherit = 'hr.employee'  
    salary_month = fields.Float('Salary/Month', required=True) 
    earning_type_id = fields.One2many('employee.payroll.earnings','earnings_id','Earnings') 

答えて

1

ビューファイル内のonchange属性を記述する必要はありません。新しいAPIを使用すると、我々は直接api.onchange我々はone2manyフィールドにコンテキストを渡し、self._context.get( 'context_key_name' でその値を取得することができます

( 'FIELD_NAME')@とのonchange機能を実現することができます)

次のように試してみてください。

<field name="salary_month"/> 
<field name="earning_type_id" context="{'salary_month': salary_month}"> 
    <tree editable="bottom"> 
     <field name="earnings_type" /> 
     <field name="based_on" on_change="calc_amount(based_on)" /> 
     <field name="amount" /> 
     <field name="total" /> 
    </tree> 
</field> 


@api.onchange('based_on') 
def onchange_calc_amount(self): 

    context = self._context 

    if context.has_key('salary_month'): 

     print self.based_on 
     print context.get('salary_month') 
関連する問題