← Back to team overview

openerp-india team mailing list archive

[Bug 1099359] Re: [7.0] cannot create a manual field on res.users (probably reproducible on some other models)

 

** Changed in: openobject-server
   Importance: Undecided => Medium

** Changed in: openobject-server
       Status: New => Confirmed

** Changed in: openobject-server
     Assignee: (unassigned) => OpenERP's Framework R&D (openerp-dev-framework)

-- 
You received this bug notification because you are a member of OpenERP
Indian Team, which is subscribed to OpenERP Server.
https://bugs.launchpad.net/bugs/1099359

Title:
  [7.0] cannot create a manual field on res.users (probably reproducible
  on some other models)

Status in OpenERP Server:
  Confirmed

Bug description:
  Hi,

  Reproducible on version 7.0 of OpenERP (runbot).

  Steps to reproduce (see the attached screencast):

   - Go to Settings > Technical > Database Structure > Models
   - Locate the res.users model and edit it
   - Add a new manual field
   - Save the model
   ->  AssertionError: Invalid rec_name name for model res.users

  The reason is that orm.BaseModel.__init__ assert that the defined
  _rec_name is actually a column of the model.

          # Validate rec_name
          if self._rec_name is not None:
              assert self._rec_name in self._columns.keys() + ['id'], "Invalid rec_name %s for model %s" % (self._rec_name, self._name)
          else:
              self._rec_name = 'name'

  In the model res.users, there is no _rec_name explicitely defined, and
  there isn't a 'name' column.

  When the server starts, self._rec_name is None, so it does not check
  the assert, but it assign 'name' to self._rec_name

  On the creation of a new field, __init__ is called again on the model.
  This time, self._rec_name is 'name', so it checks the assert which is
  not valid as there isn't a 'name' column on res.users.

  345                 self.pool.get(vals['model']).__init__(self.pool,
  cr)

  The server needs to be restarted because OpenERP becomes hazardous, it
  searches for the new field but this latter has not been created:

  ProgrammingError: column res_users.x_test does not exist
  LINE 1: ...."password",res_users."partner_id",res_users."id",res_users....

  This bug may happen on any model which has no 'name' column nor an
  explicit _rec_name.

  Full traceback:

  Traceback (most recent call last):
    File "/home/gbaconnier/code/dev_instances/openerp_magento7/parts/server/openerp/netsvc.py", line 289, in dispatch_rpc
      result = ExportService.getService(service_name).dispatch(method, params)
    File "/home/gbaconnier/code/dev_instances/openerp_magento7/parts/server/openerp/service/web_services.py", line 614, in dispatch
      res = fn(db, uid, *params)
    File "/home/gbaconnier/code/dev_instances/openerp_magento7/parts/server/openerp/osv/osv.py", line 169, in execute_kw
      return self.execute(db, uid, obj, method, *args, **kw or {})
    File "/home/gbaconnier/code/dev_instances/openerp_magento7/parts/server/openerp/osv/osv.py", line 123, in wrapper
      return f(self, dbname, *args, **kwargs)
    File "/home/gbaconnier/code/dev_instances/openerp_magento7/parts/server/openerp/osv/osv.py", line 179, in execute
      res = self.execute_cr(cr, uid, obj, method, *args, **kw)
    File "/home/gbaconnier/code/dev_instances/openerp_magento7/parts/server/openerp/osv/osv.py", line 166, in execute_cr
      return getattr(object, method)(cr, uid, *args, **kw)
    File "/home/gbaconnier/code/dev_instances/openerp_magento7/parts/server/openerp/addons/base/ir/ir_model.py", line 182, in write
      return super(ir_model,self).write(cr, user, ids, vals, context)
    File "/home/gbaconnier/code/dev_instances/openerp_magento7/parts/server/openerp/osv/orm.py", line 4180, in write
      result += self._columns[field].set(cr, self, id, field, vals[field], user, context=rel_context) or []
    File "/home/gbaconnier/code/dev_instances/openerp_magento7/parts/server/openerp/osv/fields.py", line 548, in set
      id_new = obj.create(cr, user, act[2], context=context)
    File "/home/gbaconnier/code/dev_instances/openerp_magento7/parts/server/openerp/addons/base/ir/ir_model.py", line 345, in create
      self.pool.get(vals['model']).__init__(self.pool, cr)
    File "/home/gbaconnier/code/dev_instances/openerp_magento7/parts/addons/mail/res_users.py", line 51, in __init__
      init_res = super(res_users, self).__init__(pool, cr)
    File "/home/gbaconnier/code/dev_instances/openerp_magento7/parts/server/openerp/osv/orm.py", line 1080, in __init__
      assert self._rec_name in self._columns.keys() + ['id'], "Invalid rec_name %s for model %s" % (self._rec_name, self._name)
  AssertionError: Invalid rec_name name for model res.users

To manage notifications about this bug go to:
https://bugs.launchpad.net/openobject-server/+bug/1099359/+subscriptions


References