2016-04-26 151 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

可以调用'check_start_time'功能更多的时间在'write'或'然后create'方法不能保存,直到正确的值被输入。 – SDBot

+0

类中已经有一个创建方法,我可以再次调用另一个创建方法吗?非常感谢你提供快速支持btw ... –

+0

你不能只编辑现有的'create'方法吗? – SDBot

回答

1

您可以覆盖在模型的默认方法。如果你有一个,你不需要一个新的创建方法。只需插入你的领域条件。
(在你的情况,你必须同时重写的创建和写入,因为创建运行时用户要创建一个新的记录,写运行时用户要更新的记录。)

另一个解决,当你使用约束。

的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.