How to display openerp error message

In my student module, I inherited res.partner. And I want to limit the name change in the partner’s view if the partner is a student. here is my cord.

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) 

It works, but I want to display an error message in the message box. not an exception. How can i do this?

+5
source share
4 answers
 raise osv.except_osv(('Error'), ('Error Cannot Edit')) 
+5
source

Regarding @Damian's answer, osv.except_osv is marked as deprecated in the source, but it is not really outdated since it is still in many Odoo codecs. There is a newer version of openerp.exceptions.except_orm and an even newer warning. Vaguely, to say the least.

Also, don't forget to translate. Using except_orm as an example.

 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.')) 
+5
source

you can even combine a warning with an alternative value to set in the input field, for example:

  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) }, } 

see this link: https://www.odoo.com/forum/how-to/developers-13/what-should-onchange-methods-do-and-return-57760

+2
source

Check out the return section, which is likely to help you.

 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, } 
0
source

Source: https://habr.com/ru/post/1215433/


All Articles