2016-04-26 15 views
0

これは、私はもっとさらにそれを明確にする必要があると親切にもそれと私を助けるためにしてくださいClient side validation in openerpクライアント側の検証Openerp

に関する私の質問を参照しています。

私が知る必要があるのは、値をチェックして結果がfalseになったらエラーメッセージが表示されますが、一旦エラーメッセージが閉じられると、間違ってタイプされた値を保存することができます。

あなたが正しい値を入力するまで続行できないようにしてください。チェックフィールドがなる

'start_time': fields.char('Start Time'), 

と機能がなり、

def check_start_time(self,cr,uid,ids,start_time_check,context=None): 
    starting_time=start_time_check 
    try: 
     time.strptime(starting_time, "%H:%M") 
     return True 
    except ValueError: 
     raise osv.except_osv(('Error'), ('Start time not in hh:mm format (Eg: 08:30)')) 
+0

あなたは 'write'または' create'方法の1つの以上の時間が、それは正しい値になるまで保存することはできません 'check_start_time'関数を呼び出すことができます入力されます。 – SDBot

+0

既にクラス内に1つのcreateメソッドがあります。同じクラスのcreateメソッドをもう一度呼び出すことはできますか?素早くサポートしてくれてありがとうございました... –

+0

既存の 'create'メソッドを編集できませんか? – SDBot

答えて

1

あなたは、モデル内のデフォルトのメソッドをオーバーライドすることができます。あなたが持っているなら、新しいcreateメソッドは必要ありません。フィールド条件を挿入するだけです。
(あなたが新しいレコードを作成したいときに作成が実行され、ユーザーがレコードを更新したいときに実行が実行されるため、作成と書き込みの両方をオーバーライドする必要があります)

制約を使用すると、 。

Pythonの

def create(self, cr, uid, vals, context=None): 
    try: 
     time.strptime(starting_time, "%H:%M") 
    except ValueError: 
     raise osv.except_osv(('Error'), ('Start time not in hh:mm format (Eg: 08:30)')) 
    # do something 
    return super(ModelName, self).create(cr, uid, vals, context) 

def write(self, cr, uid, vals, context=None): 
    try: 
     time.strptime(starting_time, "%H:%M") 
    except ValueError: 
     raise osv.except_osv(('Error'), ('Start time not in hh:mm format (Eg: 08:30)')) 
    # do something 
    return super(ModelName, self).write(cr, uid, vals, context) 



def _check_startTime(cr, uid, ids): 
    try: 
     time.strptime(starting_time, "%H:%M") 
     return True 
    except ValueError: 
     return False 

_constraints = [(_check_startTime, 'Invalid format!', ['start_time'])] 

Here is a very useful cheat sheet.