Validação de email do OpenERP

Informe-me como evitar que os registros sejam salvos quando o usuário digitar um endereço de email inválido. No momento, o sistema exibe uma mensagem de aviso para endereço de email inválido, conforme o design, mas também salva o registro com endereço de email inválido. Como podemos impedir que o sistema salve registros com endereço de email inválido

de osv import osv

 import smtplib
 import re

  from osv import fields

 class latest_base(osv.osv):
    _inherit = ['mail.thread']
    _name='latest.base'
    _columns={
        'name':fields.char('Name'),

        'image': fields.binary("Image", help="Select image here"),

        'state': fields.selection([
                ('new','New'),
                ('starts','Starts'),
                ('progress','Progress'),
                ('won','Won'),
                ('lost','Lost'), ('tied','Tied')], 'Stage',readonly=True),
        'email':fields.char('Email'),
        }

_sql_constraints = [('unique_name', 'unique(name)', 'Sorry ! A record with the same name already exists.')]


def mymod_new(self, cr, uid, ids):
    self.write(cr, uid, ids, { 'state' : 'new' })
    return True

def mymod_starts(self, cr, uid, ids):
    self.write(cr, uid, ids, { 'state' : 'starts' })
    return True

def mymod_progress(self, cr, uid, ids):
    self.write(cr, uid, ids, { 'state' : 'progress' })
    return True

def mymod_won(self, cr, uid, ids):
    self.write(cr, uid, ids, { 'state' : 'won' })
    return True

def mymod_lost(self, cr, uid, ids):
    self.write(cr, uid, ids, { 'state' : 'lost' })
    return True
def mymod_tied(self, cr, uid, ids):
    self.write(cr, uid, ids, { 'state' : 'tied' })
    return True


def  ValidateEmail(self, cr, uid, ids, email):
    if re.match("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$", email) == None:
        raise osv.except_osv('Invalid Email', 'Please enter a valid email address')
        return False

 # create method is overridden here

         def create(self, cr, uid,values,context=None):
              if not self.ValidateEmail(cr,uid,[],values['email']):
                   raise ValidateError()
              else:
                   res = super(latest_base,self).create(cr,uid,values,context=context)
                   return res


# write method is overridden here

          def write(self, cr, uid, ids, values, context=None):
               if not self.ValidateEmail(cr,uid,ids,values['email']):
                   raise ValidateError()
                else:  
                   res = super(latest_base, self).write(cr, uid, ids, values, context=context)
                   return res 

latest_base()

ver xml

  <field name="email" on_change="ValidateEmail(email)"/>

questionAnswers(4)

yourAnswerToTheQuestion