2017-02-27 3 views
1

ich einige Module von v7 bis v10Valueerror: Erwartete Singletons: res.partner - Odoo v10 Gemeinde

Gerade jetzt Migration habe ich diese Methoden, die res.partner

@api.depends('company_id') 
def _get_country_code(self): 
    """ 
    Return the country code of the user company. If not exists, return XX. 
    """ 
    context = dict(self._context or {}) 
    for partner in self: 
     user_company = self.env['res.users'].browse(self.company_id) 
     #NOTE: replace code name with your real field name where you want to see value 
     partner.code = user_company.partner_id and user_company.partner_id.country_id \ 
      and user_company.partner_id.country_id.code or 'XX' 

@api.multi 
def default_get(self, field_list): 
    """ Load the country code of the user company to form to be created. 
    """ 
    # NOTE: use field_list argument instead of fields for fix the pylint 
    # error W0621 Redefining name 'fields' from outer scope 
    context = {} 
    res = super(ResPartner, self).default_get(field_list) 
    res.update({'uid_country': self._get_country_code }) 
    return res 

@api.multi 
def _get_uid_country(self): 
    """ Return a dictionary of key ids as invoices, and value the country code 
    of the user company. 
    """ 
    context = dict(self._context or {}) 
    res = {}.fromkeys(self._get_country_code()) 
    return res 

Ich habe diesen Fehler erben alle wenn ich versuche, einen Partner zu erstellen oder zu lesen:

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 681, in call_kw 
return call_kw_multi(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 672, in call_kw_multi 
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 2995, in read 
values[name] = field.convert_to_read(record[name], record, use_name_get) 
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/models.py", line 5171, in __getitem__ 
return self._fields[key].__get__(self, type(self)) 
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/fields.py", line 860, in __get__ 
self.determine_value(record) 
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/fields.py", line 969, in determine_value 
self.compute_value(recs) 
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/fields.py", line 924, in compute_value 
self._compute_value(records) 
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/fields.py", line 918, in _compute_value 
self.compute(records) 
File "/home/kristian/odoov10/gilda/l10n_ve_fiscal_requirements/model/partner.py", line 73, in _get_uid_country 
res = {}.fromkeys(self._get_country_code()) 
File "/home/kristian/odoov10/gilda/l10n_ve_fiscal_requirements/model/partner.py", line 51, in _get_country_code 
user_company = self.env['res.users'].browse(self.company_id) 
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/fields.py", line 854, in __get__ 
record.ensure_one() 
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/models.py", line 4783, in ensure_one 
raise ValueError("Expected singleton: %s" % self) 
ValueError: Expected singleton: res.partner(1, 33, 8, 18, 22, 23) 

ich mit diesem bin zu kämpfen, auch, denken Sie es einfacher sein wird, von v8 statt v7 zu wandern, zu v10?

Irgendwelche Ideen?

Antwort

1

Erwartet Singleton:

Klassenmethoden Einzel rufenden Objekt (Single Browsable Record) die Methode aufzurufen erforderlich und nehme an, es durch mehrere rufenden Objekte (Browsable Record) nennen dann ist Methode nicht in der Lage um zu ermitteln, für welches Objekt es verarbeitet werden soll, wird daher ein Fehler Erwarteter Singleton ausgelöst.

Neuer API-Decorator wird verwendet, um Methoden zum Aufrufen von Mustern zu definieren, ob Methoden nur einzelne Objekte oder mehrere Objekte zum Aufrufen dieser Methode zulassen.

@ api.one

Dieser Dekorateur Loops automatisch auf Aufzeichnungen von RecordSet für Sie. Self wird als aktueller Datensatz neu definiert

Hinweis: Vorsicht: Der zurückgegebene Wert wird in eine Liste eingefügt. Dies wird nicht immer vom Webclient unterstützt, z. auf Knopfdruck Methoden. In diesem Fall sollten Sie @ api.multi verwenden, um Ihre Methode zu dekorieren, und wahrscheinlich self.ensure_one() in die Methodendefinition aufrufen.

@ api.multi

Selbst wird die aktuelle RecordSet ohne Iteration sein. Dies ist das Standardverhalten (mehrere durchsuchbare Objekte). Methoden, die nicht premitive Typdaten (Liste, Wörterbuch, Funktion) gibt muss mit @ api.multi

@ api.model dekoriert werden

Diese Dekorateur alte API-Aufrufe dekoriert Funktion neu konvertieren API-Signatur Es erlaubt, höflich zu sein, wenn Code migriert wird. Self enthält keinen Record/Recordset in Methoden, die von diesem Decorator eingerichtet werden.

So rufen Sie einfach wie diese

self.env [ 'model_name'].method_name (Argumente)

Versuchen mit folgenden Code:

@api.depends('company_id') 
def _get_country_code(self): 
    """ 
    Return the country code of the user company. If not exists, return XX. 
    """ 
    context = dict(self._context or {}) 
    for partner in self: 
     user_company = self.env['res.company'].browse(self.company_id) 
     #NOTE: replace code name with your real field name where you want to see value 
     partner.code = user_company.partner_id and user_company.partner_id.country_id \ 
      and user_company.partner_id.country_id.code or 'XX' 

ändern default_get() Methode api von @ api.multi-@ api.model

Reference link

+0

Vielen Dank CH – NeoVe

1
Please try this 

    @api.multi 
    def _get_country_code(self): 
     code =False 
     for partner in self: 

      user_company = self.user_id 
    #it will return the current login-ed user id 

      code = user_company.partner_id and user_company.partner_id.country_id and user_company.partner_id.country_id.code or 'XX' 
     return code 
Verwandte Themen