OpenERP用户自定义错误

时间:2013-04-15 06:05:24

标签: python openerp

class res_users(osv.osv):

    def create(self, cr, uid, values, context=None):
        res_users_obj = self.pool.get('res.users')
        # res_users_obj.create(cr, uid, values)
        return res_users_obj.create(cr, uid, {
            'login': values['login'],
            'password': values['password'],
            'company_id': values['bpl_company_id'],
            'partner_id': values['officer_id'],
            'name': values['login']
            })

    # _inherit = "res.users"
    _name = "bpl.res.users"
    _columns = {
        'bpl_company_id':fields.many2one(
            'bpl.company.n.registration',
            'Company'),
        'bpl_estate_id':fields.many2one(
            'bpl.estate.n.registration',
            'Estate',
            help='Estate',
            domain="[('company_id','=',bpl_company_id)]"),
        'officer_id':fields.many2one(
            'bpl.officer',
            'User',
            domain="[('bpl_company_id','=',bpl_company_id)]"),
        'login': fields.char('Login', size=20),
        'password': fields.char('Password', size=20),
    }
res_users()

上面的代码显示res_user模型中的bpl课程。当我在这里创建用户时,我将在我的页面中创建用户并在res_users中添加记录。

问题现在我的用户正在res_users表中创建,但不在bpl_res_users表中创建。当我按下save按钮时,它会在表单视图上等待,而不是导航到树视图。控制台中没有显示错误。

我上传了整个代码here @ GitHub

5 个答案:

答案 0 :(得分:2)

class res_users(osv.osv):

    def create(self, cr, uid, values, context=None):
        res_users_obj = self.pool.get('res.users')
        res_users_obj.create(cr, uid, {
            'login': values['login'],
            'password': values['password'],
            'company_id': values['bpl_company_id'],
            'partner_id': values['officer_id'],
            'name': values['login'],
        }, context=context)
        return super(res_users, self).create(cr, uid, values, context=context)

    # _inherit = "res.users"
    _name = "bpl.res.users"
    _columns = {
        'bpl_company_id':fields.many2one('bpl.company.n.registration', 'Company'),
        'bpl_estate_id':fields.many2one('bpl.estate.n.registration', 'Estate', help='Estate', domain="[('company_id','=',bpl_company_id)]"),
        'officer_id':fields.many2one('bpl.officer', 'User', domain="[('bpl_company_id','=',bpl_company_id)]"),
        'login': fields.char('Login', size=20),
        'password': fields.char('Password', size=20),
    }


res_users()

现在它起作用了。需要添加super()方法..现在保存两个表中的记录。

@Arya
谢谢你的建议

答案 1 :(得分:2)

更好的解决方案是

class bpl_res_users(osv.osv):
    _inherits = {
        'res.users': 'user_id',
    }
    _name = "bpl.res.users"
    _columns = {
        'user_id': fields.many2one('res.users', required=True,
        string='Related User', ondelete='restrict',
        help='User-related data of the bpluser'),
        #define all other additional fields needed in your new model.
    }
bpl_res_users()

如果在此bpl.res.users模型中创建记录,则会在res.users中自动创建记录。您可以在base模块中找到类似的示例。检查如何创建res.users模型。

答案 2 :(得分:1)

你在代码中做了什么

def create(self, cr, uid, values, context=None):
        res_users_obj = self.pool.get('res.users')
        # res_users_obj.create(cr, uid, values)
        return res_users_obj.create(cr, uid, {        'login': values['login'],
                                                      'password': values['password'],
                                                      'company_id': values['bpl_company_id'],
                                                      'partner_id': values['officer_id'],
                                                      'name': values['login']
                                                      })

res_users_obj = self.pool.get('res.users') 您汇集res.user对象,而不是使用

def create(self, cr, uid, values, context=None):

    return self.create(cr, uid, {        'login': values['login'],
                                                  'password': values['password'],
                                                  'company_id': values['bpl_company_id'],
                                                  'partner_id': values['officer_id'],
                                                  'name': values['login']
                                                  })

答案 3 :(得分:0)

试试这个:

class bpl_res_users(osv.osv):

    _name = "bpl.res.users"
    _columns = {
        'bpl_company_id':fields.many2one('bpl.company.n.registration', 'Company'),
        'bpl_estate_id':fields.many2one('bpl.estate.n.registration', 'Estate', help='Estate', domain="[('company_id','=',bpl_company_id)]"),
        'officer_id':fields.many2one('bpl.officer', 'User', domain="[('bpl_company_id','=',bpl_company_id)]"),
        'login': fields.char('Login', size=20),
        'password': fields.char('Password', size=20),
    }

bpl_res_users()

从xml添加相关的视图,操作和菜单。更新您的模块并进行检查。

答案 4 :(得分:0)

  def write_employee(self, cr, uid, ids, context=None):
       user_id=self.browse(cr,uid,ids,context=context).user_id
       if not user_id:
            for rec in self.browse(cr,uid, ids, context=context):
                  vals = { 'name':rec.name ,    'login':rec.work_email,'active':True }
                   user=self.pool.get('res.users').create( cr, uid, vals, context=context )
                   self.write( cr, SUPERUSER_ID, ids, {'user_id':user})
      return True
  

试试这个并且忘记将从openerp import SUPERUSER_ID 作为头文件