2017-03-13 2 views
0

betrachten diese Methode:Zweifel über Migration über Odoo Module von v8 v10 Community - und Fehler

@api.multi 
def _get_loc_req(self): #, cr, uid, context=None 
    """Get if a field is required or not by a Localization 
    @param uid: Integer value of the user 
    """ 
    context = dict(self._context or {}) 
    res = True 
    ru_brw = self.pool.get('res.users').browse(
     self.cr, uid, uid, context=context) 
    rc_obj = self.pool.get('res.company') 
    rc_brw = rc_obj.browse(self.cr, uid, ru_brw.company_id.id, context=context) 

    if rc_brw.country_id and rc_brw.country_id.code == 'VE' and \ 
      rc_brw.printer_fiscal: 
     res = False 
    return res 

Wie Sie sehen können, habe ich hinzugefügt @api.multicr, uid, context=None kommentiert seit mehreren Pflege dieser Argumente automatisch übernehmen sollte, Recht?

Aber zum Beispiel, wenn ich diesen Code ausführen, es diesen Fehler wirft:

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/odoov10/odoo-10.0rc1c-20161005/odoo/addons/account/models/account_invoice.py", line 342, in create 
invoice = super(AccountInvoice, self.with_context(mail_create_nolog=True)).create(vals) 
File "/home/kristian/odoov10/odoo-10.0rc1c-20161005/odoo/addons/mail/models/mail_thread.py", line 227, in create 
thread = super(MailThread, self).create(values) 
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/models.py", line 3778, in create 
vals = self._add_missing_default_values(vals) 
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/models.py", line 1618, in _add_missing_default_values 
defaults = self.default_get(list(missing_defaults)) 
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/model/invoice.py", line 61, in <lambda> 
default=lambda s: s._get_loc_req(), 
File "/home/kristian/odoov10/gilda/l10n_ve_fiscal_requirements/model/invoice.py", line 127, in _get_loc_req 
self.cr, uid, uid, context=context) 
AttributeError: 'account.invoice' object has no attribute 'cr' 

Auf der Methode oben, ich cr-self.cr nach neuer api, aber kein Erfolg, derselbe Fehler geändert habe, und zum Beispiel self.pool.get sollte es nicht self.env sein? Oder kann es so bleiben?

Wie sollte es im Allgemeinen aussehen, um auf einer neuen API zu sein? neben Dekorateur und cr Aussagen?

@api.multi 
def my_method(self): 
    return 

Aber wenn es ursprünglich cr, uid, ids, context etc hatte, und diese Argumente sind tatsächlich in der Methode, (wie in:

Ein weiterer Zweifel habe ich, zum Beispiel, kann diese Art von Methoden, wie erklärt werden die obige Methode) sollten sie ersetzt werden? Wie sollte es aussehen?

Wie kann ich das lösen? Und wenn Sie erklären können, dass diese Verhöre auch großartig wären!

Antwort

2

denke ich Ihre Methode geschrieben werden könnte:

@api.model 
def _get_loc_req(self): 
    company = self.env.user.company_id 
    if (company.country_id and company.country_id.code == 'VE' and 
      company.printer_fiscal): 
     return False 
    return True 

In Bezug auf Ihre zweite Frage - in der neuen API, gibt es keine Notwendigkeit, um cr,uid, ids und Kontext explizit übergeben ist - cr (self.env.cr), uid (self.env.user) und context (self.env.context) werden über die Umgebung an Ihre Methode übergeben (self.env) und der Begriff ids wird durch record sets ersetzt. Odoo 10 unterstützt nicht die alte API (Pre-Version 8), daher würde ich empfehlen, etwas Zeit zu investieren, um sich an die neue API zu gewöhnen: link, link, link, link. Schauen Sie sich auch den Code official Odoo addons for version 10.0 an - alle werden mit der neuen API geschrieben.

+0

Das ist richtig, es gibt keine Notwendigkeit, Cursor, UID, etc. nirgendwo mehr zu übergeben. Jede alte Stilmethode muss für die neue API in Odoo 10 vollständig neu geschrieben werden, da die alte API komplett entfernt wurde. – CZoellner

+0

Vielen Dank! – NeoVe

Verwandte Themen