在 Odoo 8 的 If 语句中更改字段值

Change a field value within an If statement in Odoo 8

我一直在使用带有 Ubuntu 14.04 的 Odoo 8。我有一个 onchange 函数,在该函数下有一个 If 语句,我试图在其中更改字段值,但它没有得到更改。我所需要的只是将空值或 0.0 分配给该字段但失败了。我的 Python 代码如下:

def _proposed_total(self):
    print self.emp_propose_allowance
    self.emp_propose_total = self.emp_propose_basic + self.emp_propose_allowance
    cr=self._cr
    uid=self._uid
    ids=self._ids 
    val=int(self.employee_name)
    if(val):
       cr.execute("select max_salary,min_salary from hr_job where id in (select job_id from hr_employee where id='"+str(val)+"')")
       res=cr.fetchall()
       for data in res:
               max_sal=data[0]
               min_sal=data[1]
           if(self.emp_propose_total>max_sal): 
              raise osv.except_osv('out of range','Proposed Total must be in between "'+str(max_sal)+'" to "'+str(min_sal)+'"')            
              self.emp_propose_basic=0.0
              self.emp_propose_allowance=0.0

           elif(self.emp_propose_total<min_sal):
              raise osv.except_osv('out of range','Proposed Total must be in between "'+str(max_sal)+'" to "'+str(min_sal)+'"')
              self.emp_propose_basic=0
              self.emp_propose_allowance=0  
        else:
           cr.execute("select wage from hr_contract where employee_id=0") 

我想更改 self.emp_propose_basic 和 self.emp_propose_allowance。我不确定我在这里做错了什么。请指导我或指出我的错误以实现此目标

你必须在最后提出异常!引发异常会中止当前代码的执行,这就是您的值不会更改的原因。未达到这些语句。

您可以用更 Pythonic 的风格重写您的 ifs,例如:

if not (min_sal < self.emp_propose_total < max_sal):
    self.emp_propose_basic = 0.0
    self.emp_propose_allowance = 0.0
    raise osv.except_osv('out of range','Proposed Total must be in between %s to %s' % (max_sal, min_sal))

如果您提出任何异常,那么您之前所有未提交的语句都将回滚。因此,如果您从方法中引发,则不会将值设置到字段。

在那里选择提高或设置默认值,如果需要,您应该return警告,它不会中断您的执行。

对于return警告检查销售订单中价目表的onchange方法。