2017-08-18 19 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

相關問題