2017-08-18 22 views
2

一旦我点击保存,我想要更改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

状态是一个相关的领域,所以创建后,改变你many2one领域的地位。

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

感谢您的答案 – Borealis

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) 
+0

它不起作用 – Borealis

+1

请告诉我,你做了什么,结果! – qvpham

+0

完全和你写的一样。我试着在创建后改变这个值 – Borealis

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) 

默认情况下,只读的每个字段都是false,所以不需要在选择字段中指定它。

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

+0

@ SOS-Mona这是正确的答案。选择字段需要一个'selection'参数来定义字段的选项。它默认为'None',所以你将无法设置任何有意义的值。查看[选择字段的文档](http://www.odoo.com/documentation/9.0/reference/orm.html#openerp.fields.Selection)。 “除了相关字段或字段扩展名外,属性选择是强制性的。” – travisw

相关问题