2015-03-16 3 views
5

В моем студенческом модуле я унаследовал res.partner. И я хочу ограничить изменение имени в представлении партнера, если партнер является студентом. вот мой шнур.как отображать сообщение об ошибке openerp

from openerp.osv import osv, fields 


class res_partner(osv.Model): 
    _inherit = 'res.partner' 
    _columns = { 
     'name': fields.char('Name', size=250, required=True, select=True), 
     'is_student': fields.boolean('Student', readonly=True), 
} 

def write(self, cr, uid, ids, vals, context=None): 

    stud = self.browse(cr, uid, ids, context=context)[0] 

    if ('name' in vals) & (stud.is_student is True): 
     raise "Cannot Edit" 
    else: 
     return super(res_partner, self).write(cr, uid, ids, vals, context=context) 

Он работает, но я хочу показать сообщение об ошибке в окне сообщения. не исключение. Как я могу это сделать?

ответ

5
raise osv.except_osv(('Error'), ('Error Cannot Edit')) 
+0

Он работает .. Спасибо Дамиан. – Chamal

5

Что касается @ ответа Дамиана, osv.except_osv отмечается в источнике, как одобряется, но не на самом деле является устаревшим еще, как это до сих пор в большом количестве Odoo кода. Существует более новая версия openerp.exceptions.except_orm и еще более новое предупреждение. Смутно, если не сказать больше.

Кроме того, не забудьте перевести. Использование except_orm в качестве примера.

from openerp.exceptions import except_orm 
from openerp.tools.translate import _ 

raise osv.except_osv(_('Error!'), _("Something bad happened.")) 

или:

from openerp import _ 
from openerp.exceptions import Warning 

raise Warning(_('Something bad happened.')) 
+0

Спасибо, Адриан. Он работает Но у меня проблема сейчас ... Я просто хочу запретить редактирование имени в представлении партнера. Но теперь я не могу даже изменить имя из представления ученика. Как я мог это сделать? – Chamal

+0

Как и в случае с Odoo 10, except_orm устарел, и это также Предупреждение. Посмотрите этот файл, он хорошо прокомментирован: odoo/exceptions.py – Jerther

0

Проверьте обратный участок, который, вероятно, поможет вам.

def check_partners_email(self, cr, uid, partner_ids, context=None): 
     """ Verify that selected partner_ids have an email_address defined. 
      Otherwise throw a warning. """ 
     partner_wo_email_lst = [] 
     for partner in self.pool.get('res.partner').browse(cr, uid, partner_ids, context=context): 
      if not partner.email: 
       partner_wo_email_lst.append(partner) 
     if not partner_wo_email_lst: 
      return {} 
     warning_msg = _('The following contacts have no email address :') 
     for partner in partner_wo_email_lst: 
      warning_msg += '\n- %s' % (partner.name) 
     return {'warning': { 
        'title': _('Email addresses not found'), 
        'message': warning_msg, 
        } 
2

вы можете даже объединить предупреждение с альтернативным значением для установки в InputField, например, так:

if not start_date < end_date: 
     return { 
      'warning': { 
       'title': _('Warning'), 
       'message': _('End date must be bigger than start date'), 
      }, 
      'value': { 
       'elec_end_agreement': 
        self.get_end_date(cr, uid, pp_id, start_date) 
      }, 
     } 

смотрите по этой ссылке: https://www.odoo.com/forum/how-to/developers-13/what-should-onchange-methods-do-and-return-57760

+0

Просто примечание: это будет работать только в методе onchange. Если вам нужно показать сообщение об ошибке/ошибке в другой функции, используйте другие ответы. – ChristophLSA

Смежные вопросы