Как добавить номер мобильного телефона с единственным целым числом в модуле 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 {}

Вы можете удалить заменяющую часть, если хотите.

Другие вопросы по тегам