【问题标题】:Change a field value within an If statement in Odoo 8在 Odoo 8 的 If 语句中更改字段值
【发布时间】:2015-06-25 11:19:12
【问题描述】:

我一直在使用 Odoo 8 和 Ubuntu 14.04。我有一个 onchange 函数,在该函数下有一个 If 语句,我试图在其中更改字段值但它没有得到 change 。我需要的只是将空值或 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 。我不确定我在这里做错了什么。请指导我或指出我的错误以实现这一目标

【问题讨论】:

    标签: python openerp odoo-8


    【解决方案1】:

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

    在此处选择 raise 或设置默认值,如果需要,您应该返回警告,它不会中断您的执行。

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

    【讨论】:

      【解决方案2】:

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

      你可以用更 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))
      

      【讨论】:

      • 感谢回复,问题依旧
      • 您应该检查self.emp_propose_total 的值,看看您是否真的输入了 if 子句。另外,检查它的类型是否正确 int 或 float(而不是 string)。
      • 它进入if子句,我打印了self.emp_propose_total的值,它给出了60000.0
      • 那么,你应该检查(打印)输入if子句前后self.emp_propose_basicself.emp_propose_allowance的值
      猜你喜欢
      • 1970-01-01
      • 2014-08-19
      • 1970-01-01
      • 2018-11-09
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 2018-02-28
      • 1970-01-01
      相关资源
      最近更新 更多