Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 Odoo如何覆盖默认函数新API_Python 2.7_Inheritance_Openerp_Odoo 9 - Fatal编程技术网

Python 2.7 Odoo如何覆盖默认函数新API

Python 2.7 Odoo如何覆盖默认函数新API,python-2.7,inheritance,openerp,odoo-9,Python 2.7,Inheritance,Openerp,Odoo 9,我正在尝试覆盖类消息方法 def\u获取默认值\u作者(自我)通过以下示例: 原始模型: class Message(models.Model): _name = 'mail.message' _inherit = ['ir.needaction_mixin'] @api.model def _get_default_author(self): return self.env.user.partner_id author_id

我正在尝试覆盖类消息方法 def\u获取默认值\u作者(自我)通过以下示例:

原始模型:

class Message(models.Model):
    _name = 'mail.message'
    _inherit = ['ir.needaction_mixin']

     @api.model
     def _get_default_author(self):
         return self.env.user.partner_id

     author_id = fields.Many2one(
             'res.partner', 'Author', select=1,
             ondelete='set null', default=_get_default_author,
             help="Author of the message. If not set, email_from may hold an email address that did not match any partner.")
继承的模型:

class MyClass(models.Model):
    _name = 'my.class'
    _inherit = ['mail.thread', 'ir.needaction_mixin']

    @api.model
    def _get_default_author(self):
        new = self.env['res.users'].search([('id', '=', '1')])
        return new.partner_id

    author_id = fields.Many2one(default=_get_default_author)
但我有一个错误:

File "/opt/odoo/openerp/models.py", line 4113, in create
    vals = self._add_missing_default_values(vals)
  File "/opt/odoo/openerp/api.py", line 236, in wrapper
    return new_api(self, *args, **kwargs)
  File "/opt/odoo/openerp/api.py", line 478, in new_api
    result = method(self._model, cr, uid, *args, **old_kwargs)
  File "/opt/odoo/openerp/models.py", line 1776, in _add_missing_default_values
    defaults = self.default_get(cr, uid, list(missing_defaults), context)
  File "/opt/odoo/openerp/api.py", line 238, in wrapper
    return old_api(self, *args, **kwargs)
  File "/opt/odoo/openerp/api.py", line 342, in old_api
    result = method(recs, *args, **kwargs)
  File "/opt/odoo/openerp/models.py", line 1336, in default_get
    defaults = self._convert_to_cache(defaults, validate=False)
  File "/opt/odoo/openerp/models.py", line 5454, in _convert_to_cache
    for name, value in values.iteritems()
  File "/opt/odoo/openerp/models.py", line 5455, in <dictcomp>
    if name in fields
  File "/opt/odoo/openerp/fields.py", line 1655, in convert_to_cache
    raise ValueError("Wrong value for %s: %r" % (self, value))
ValueError: Wrong value for my.class.author_id: res.partner(3,)
创建中的第4113行“/opt/odoo/openerp/models.py” VAL=自身。\添加\缺少\默认值(VAL) 包装器中的文件“/opt/odoo/openerp/api.py”,第236行 返回新的_api(self、*args、**kwargs) 新api中的文件“/opt/odoo/openerp/api.py”,第478行 结果=方法(自身模型、cr、uid、*参数、**旧参数) 文件“/opt/odoo/openerp/models.py”,第1776行,在“添加\缺少\默认值”中 默认值=self.default\u get(cr、uid、列表(缺少默认值)、上下文) 包装器中的文件“/opt/odoo/openerp/api.py”,第238行 返回旧的_api(self、*args、**kwargs) 旧api中的文件“/opt/odoo/openerp/api.py”,第342行 结果=方法(recs、*args、**kwargs) 默认情况下,文件“/opt/odoo/openerp/models.py”第1336行 默认值=self.\u将\u转换为\u缓存(默认值,验证=False) 文件“/opt/odoo/openerp/models.py”,第5454行,在转换到缓存中 对于名称,使用values.iteritems()中的值 文件“/opt/odoo/openerp/models.py”,第5455行,在 字段中的if名称 文件“/opt/odoo/openerp/fields.py”,第1655行,在convert_to_缓存中 raise VALUERROR(“错误的%s值:%r”%(自身,值)) ValueError:my.class.author\u id:res.partner(3,)的值错误 我做错了什么?也许还有其他方法可以覆盖默认函数

更新:
为了测试,我对核心类消息(models.Model)做了相同的更改。一切都很好。因此,据我所知,问题在于我的代码。可能是我覆盖错误了。

您没有覆盖或扩展
mail.message
,而是创建了自己的模型
my.class
。要扩展或覆盖Odoo模型,只需使用
\u inherit
类属性:

class MyClass(models.Model):
_继承='mail.message'
_name='mail.message'#可选!
@api.model
定义获取默认作者(自我):
new=self.env['res.users'].search([('id','=','1'))
返回新的.partner\u id
author\u id=fields.manyOne(默认值=\u get\u default\u author)
现在来谈谈你的错误。您正在创建自己的模型
my.class
,其中包含一个字段
author\u id
。该字段是一个多1关系字段,它总是需要一个comodel来获取关系。通过思考“我将覆盖另一个模型默认函数”,您当然没有填充
comodel_name
参数,因为在覆盖时,这是不需要的

但你并没有压倒一切。因此,奥多正在用
comodel\u name
填充。您的默认方法是返回一条
res.partner
记录,但Odoo需要一条
对象
记录

因此,该错误只是继承/重写现有Odoo模型的错误尝试的后遗症