在 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方法。
我一直在使用带有 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方法。