2012-12-11 61 views
3

我見過this問題並用它來實現openerp中的類似目標。因此,我的函數:OpenERP中的onchange函數的值等於默認值

def onchange_warning(self, cr, uid, ids, result, lower, upper, context=None): 
    res={} 
    flag = False 
    if result < lower or result > upper: 
     flag = True 
    res = {'warning': flag} 
    return {'value': res} 

並在視圖我有:

<field name="result" on_change="onchange_warning(result, lower, upper)"/> 

其中結果,並是花車,和警告是布爾沒有默認值值。在我的表單裏面的樹我有兩個預定義的值,而結果空(0.00)並設置爲被填充。

該功能運作良好,並做它應該的。然而,我面臨一個問題,結果是實際上等於0.0並且應該設置標誌,而功能(D'Oh!)不能執行,因爲該字段值在技術上沒有從其默認值0.00。該怎麼辦?

PS:很抱歉的可怕稱號,隨意提高它:)

編輯:

如果有人需要看到的功能是如何成爲:

def onchange_warning(self, cr, uid, ids, result, lower, upper, context=None): 
    res={} 
    flag = False 
    if float(result) < lower or float(result) > upper: 
     flag = True 
    res = {'warning': flag} 
    return {'value': res} 

結果現在是fields.c har

回答

2

浮點字段的默認值始終爲0.0。只有在更改值時纔會調用on_change。

如果您想在值爲「0」時執行任何操作,則可以使用char字段而不是float。當你的on_change被調用時,你必須將字符串的值轉換爲浮點數,然後你可以進一步操作。

您可以將您的類型轉換代碼放在try中,除非在執行除外塊時引發異常。

例如:嘗試:

def on_change_float(self, cr, uid, ids, test1, context=None): 
    val = float(test1) 
    except Exception: 
     raise osv.except_osv('Input Error ! ', 'Please enter numbers.') 
    return {'value': {'test1': val}} 
+0

我希望我would'nt需要使用焦炭領域,投它。那麼沒有其他辦法了? – 3a2roub

+0

我不知道爲什麼我的麻煩,你說的是準確和合理的,它適用於炭和鑄造。謝謝。 – 3a2roub

+1

是的,只有在數值上有值時纔可以投出char值。所以你必須假設用戶不會在該字段中輸入字符。 –