Как добавить номер мобильного телефона с единственным целым числом в модуле CRM в OpenERP
В модуле CRM есть поле мобильного номера. Но это char
поле я могу добавить буквенные символы также. Я бы предпочел, чтобы он работал только с цифрами. Поэтому я заменил mobile:fields.char('Mobile',size=20)
с mobile:field.integer('Mobile')
, но я могу добавить до 9 цифр. Есть ли другой способ добавить номер мобильного телефона только с целыми числами? Мы используем PostgreSQL, поэтому есть числовой тип данных, поэтому я также попытался mobile:fields.numeric('Mobile',size=10)
это выдает мне ошибку как:
"datatype not used in module".
2 ответа
Используйте регулярное выражение для проверки
import re
from osv import osv,fields
class crm_lead_inherit(osv.osv):
_name = _inherit = 'crm.lead'
def create(self,cr,uid,vals,context=None):
if 'mobile' in vals and vals['mobile']:
if re.match("^[0-9]*$", vals['mobile']) != None:
pass
else:
raise osv.except_osv(_('Invalid Mobile No'),_('Please enter a valid Phone Number'))
return super(crm_lead_inherit, self).create(cr, uid,vals, context=context)
def write(self,cr,uid,ids,vals,context=None):
if 'mobile' in vals and vals['mobile']:
if re.match("^[0-9]*$", vals['mobile']) != None:
pass
else:
raise osv.except_osv(_('Invalid Mobile No'),_('Please enter a valid Phone Number'))
return super(crm_lead_inherit, self).write(cr, uid,ids,vals, context=context)
crm_lead_inherit()
Решение сентилнатанга является частично правильным. Также не стоит изменять функции создания, записи, поиска. Поэтому я считаю, что нужно использовать функцию on_change для мобильных устройств. В представлении xml добавьте onchange
<field name="mobile" on_change="onchange_mobile(mobile)"/>
Затем в файле python для ведущего crm, внутри класса crmlead,
def onchange_mobile(self, cr, uid, ids, mobile, context=None):
if not mobile:
return {}
mobile = mobile.replace('.','') #removes any '.' from the string
mobile = mobile.replace(' ','') #removes space from the string
if not mobile.isdigit():
raise osv.except_osv(_('Invalid Mobile No'),_('Please enter a valid Phone Number'))
return {}
Вы можете удалить заменяющую часть, если хотите.