TypeError: 'instancemethod' object has no attribute '__getitem__' - Odoov8 to Odoov10 community

TypeError: 'instancemethod' object has no attribute '__getitem__' - Odoov8 to Odoov10 community

我仍在将一些模块从 v8 迁移到 v10 社区。

我有这些方法:

@api.multi
def _get_url(self): 

    url = self.env['seniat.url']
    url_ids = url.search['seniat.url'] 
    if len(url_ids) > 1:
        url.unlink.self.env.url_ids[1:] 
    url_obj = self.env['url_ids'].browse() 
    return url_obj 

@api.multi
def _get_url1(self): 
    url_obj = self._get_url() 
    return url_obj.name

@api.multi
def _get_url2(self): 
    url_obj = self._get_url() 
    return url_obj.url_seniat

@api.multi
def _get_url3(self): 
    url_obj = self._get_url()
    return url_obj.url_seniat2

这些方法,调用这些字段:

url1 = fields.Char(
    string='URL1', size=255, required=True, readonly=False,
    default=lambda s: s._get_url1(),
    help='In this field enter the URL from Seniat for search the'
    ' fiscal information from partner')
url2 = fields.Char(
    string='URL2', size=255, required=True, readonly=False,
    default=lambda s: s._get_url2(),
    help='In this field enter the URL from Seniat for search the'
    ' retention rate from partner (RIF)')
url3 = fields.Char(
    string='URL3', size=255, required=True, readonly=False,
    default=lambda s: s._get_url3(),
    help='In this field enter the URL from Seniat for search the'
    ' retention rate from partner (CI or Passport)')

我的看法:

   <record id="view_wizard_url_seniat" model="ir.ui.view">
        <field name="name">view.wizard.seniat.url</field>
        <field name="model">wizard.seniat.url</field>
        <field name="arch" type="xml">
            <form string="Update Url From Seniat" version="7.0">
                <separator string="URL Seniat for Partner Information" colspan="4"/>
                <field name="url1"/>
                <newline/>
                <separator string="URL Seniat for Retention Rate (Rif)" colspan="4"/>
                <field name="url2"/>
                <newline/>
                <separator string="URL Seniat for Retention Rate (CI or Passport)" colspan="4"/>
                <field name="url3"/>
                <separator string="Are you sure you want to do this?" colspan="4"/>
                 <group colspan="8" col="8">
                        <button icon="fa-book" name="update_url" string="Yes" type="object"/>
                        <button icon="fa-pencil-square-o" special="cancel" string="No"/>
                 </group>
            </form>
        </field>
    </record>

当我点击这个按钮时,它会抛出这个:

Traceback (most recent call last):
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/http.py", line 638, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/http.py", line 675, in dispatch
result = self._call_function(**self.params)
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/http.py", line 331, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/service/model.py", line 119, in wrapper
return f(dbname, *args, **kwargs)
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/http.py", line 324, in checked_call
result = self.endpoint(*a, **kw)
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/http.py", line 933, in __call__
return self.method(*args, **kw)
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/http.py", line 504, in response_wrap
response = f(*args, **kw)
File "/home/kristian/odoov10/odoo-10.0rc1c-20161005/odoo/addons/web/controllers/main.py", line 862, in call_kw
return self._call_kw(model, method, args, kwargs)
File "/home/kristian/odoov10/odoo-10.0rc1c-20161005/odoo/addons/web/controllers/main.py", line 854, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/api.py", line 679, in call_kw
return call_kw_model(method, model, args, kwargs)
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/api.py", line 664, in call_kw_model
result = method(recs, *args, **kwargs)
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/models.py", line 1101, in default_get
defaults[name] = field.default(self)
File "/home/kristian/odoov10/gilda/l10n_ve_fiscal_requirements/wizard/wizard_url_seniat.py", line 41, in <lambda>
default=lambda s: s._get_url3(),
File "/home/kristian/odoov10/gilda/l10n_ve_fiscal_requirements/wizard/wizard_url_seniat.py", line 69, in _get_url3
url_obj = self._get_url()
File "/home/kristian/odoov10/gilda/l10n_ve_fiscal_requirements/wizard/wizard_url_seniat.py", line 50, in _get_url
url_ids = url.search['seniat.url'] 
TypeError: 'instancemethod' object has no attribute '__getitem__'

不知道是不是我没放self.ensure_one()的缘故。错误出现在这里:url_obj = self.env['url_ids'].browse()url_ids = url.search['seniat.url']

由于是迁移,所以还有一些地方可能有bug。

有什么想法吗?

您正在使用方括号调用 search 方法。

应该是:

url.search(...)

当您使用 ['something'] 时,您正在尝试访问方法的 item/property,而方法没有 __getitem__ 属性来处理此类调用。