如何在创建函数上更改选择字段的值?

时间:2017-08-18 11:24:44

标签: odoo odoo-10

点击“保存”后,我想更改status的值。 status是一个选择字段[('ok', 'Ok'),('tobe', 'Not Ok')]

    status = fields.Selection(
        readonly=False,
        default='tobe',
        related= 'name.status'      
    )
    @api.model
    def create(self, values):
        self.status= 'ok'
        line = super(MyClass, self).create(values)
        return line       

3 个答案:

答案 0 :(得分:4)

状态是一个相关字段,因此在创建更改后,您的状态为many2one字段。

  @api.model
  def create(self, values):
         rec = super(YouClassName, self).create(values)
         # here change the status. 
         rec.name.status = 'ok'
         return rec

答案 1 :(得分:3)

错误在您的选择字段声明中。它应该是这样的:

status = fields.Selection([('ok', "OK"),('not ok', "Not OK"),],default='tobe')

@api.multi
def write(self, vals):
    vals['status'] = 'ok'
    ret = super(Your-Class-Name-here, self).write(vals)

默认情况下,每个字段的readonly都为false,因此无需在选择字段中指定它。

请通知我,如果这可以解决您的挑战。 感谢

答案 2 :(得分:1)

当时调用方法create时,您的实例不会被创建。所以self没有任何实例。 self.status = 'ok'将改变任何状态的值。

您可以设置values中的值:

@api.model
def create(self, values):
    values['status'] = 'ok'
    line = super(MyClass, self).create(values)
    return line

或者在创建实例后更改值:

@api.model
def create(self, values):
    line = super(MyClass, self).create(values)
    line.status = 'ok'
    return line

但只有在创建新实例时才调用方法create。有一种情况,有人想要保存实例。然后,您必须覆盖方法write

@api.multi
def write(self, vals):
    vals['status'] = 'ok'
    ret = super(FrameworkAgreement, self).write(vals)