как отобразить сообщение об ошибке openerp

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

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)

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


person Chamal    schedule 16.03.2015    source источник


Ответы (3)


Что касается ответа @Damian, osv.except_osv помечен в источнике как устаревший, но на самом деле еще не устарел, поскольку он все еще присутствует во многих кодах Odoo. Есть более новый openerp.exceptions.except_orm и еще более новый Warning. Запутанно, если не сказать больше.

Также не забывайте переводить. Используя в качестве примера, exclude_orm.

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

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

or:

from openerp import _
from openerp.exceptions import Warning

raise Warning(_('Something bad happened.'))
person Adrian Merrall    schedule 17.03.2015
comment
Спасибо Адриан. Это работает, но у меня возникла проблема... Я просто хочу запретить редактирование имени в режиме просмотра партнера. Но теперь я даже не могу изменить имя из студенческого просмотра. Как я мог это сделать? - person Chamal; 17.03.2015
comment
Начиная с Odoo 10, exclude_orm устарел, как и Warning. Посмотрите этот файл, он хорошо прокомментирован: odoo/exceptions.py - person Jerther; 03.05.2017

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

   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

person Roel Zantinge    schedule 24.07.2015
comment
Просто примечание: это будет работать только в методе onchange. Если вам нужно показать предупреждение/сообщение об ошибке в другой функции, используйте другие ответы. - person ChristophLSA; 25.04.2016

Проверьте раздел возврата, это, вероятно, поможет вам.

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,
                    }
person Capriatto    schedule 30.05.2015