2017-03-22 6 views
0

Diese Methoden sollten den res.partner-Namen in der Formularansicht aktualisieren, es öffnet ein neues Fenster mit Partnername und eine Schaltfläche, um es zu aktualisieren.DataError: ungültige Eingabesyntax für Integer: "aktiv" - Odoo v8 zu Odoo v10-Community

Ursprünglich auf v8 es sah wie folgt aus:

class WizUpdatename(osv.osv_memory): 
_name = 'wiz.updatename' 
_description = "Wizard that changes the partner name" 

def set_name(self, cr, uid, ids, context): 
    """ Change value of the name field 
    """ 
    data = self.pool.get('wiz.updatename').read(cr, uid, ids)[0] 
    if not data['sure']: 
     raise osv.except_osv(
      _("Error!"), 
      _("Please confirm that you want to do this by checking the" 
       " option")) 

    partner_obj = self.pool.get('res.partner') 
    name_partner = data['name'] 

    partner_obj.write(cr, uid, context['active_id'], 
         {'name': name_partner}, context=context) 
    return {} 

def _get_name(self, cr, uid, context=None): 
    """ Get name field value 
    """ 
    if context is None: 
     context = {} 
    partner_obj = self.pool.get('res.partner') 
    partner = partner_obj.search(cr, uid, 
           [('id', '=', context['active_id'])]) 
    partner_o = partner_obj.browse(cr, uid, partner[0]) 
    return partner_o and partner_o.name or False 

_columns = { 
    'name': fields.char(
     string='Name', size=256, required=True, 
     default=lambda s: s._get_name()), 
    'sure': fields.boolean('Are you sure?'), 
} 

WizUpdatename() 

Nach mirgation, es sieht nun wie folgt aus:

class WizUpdatename(models.TransientModel): 
_name = 'wiz.updatename' 
_description = "Wizard that changes the partner name" 

name = fields.Char(
    string='Name', size=256, required=True, 
    default=lambda s: s._get_name()) 
sure =fields.Boolean(string='Are you sure?') 

@api.multi 
@api.depends('res.partner') 
def set_name(self): #, cr, uid, ids, context 
    """ Change value of the name field 
    """ 
    data = self.env['wiz.updatename'].read()[0] 
    if not data['sure']: 
     raise UserError(
      _("Error!"), 
      _("Please confirm that you want to do this by checking the" 
       " option")) 

    partner_obj = self.env['res.partner'] 
    name_partner = data['name'] 

    partner_obj.write(context['active_id'], 
         {'name': name_partner}) 
    return {} 

@api.depends('res.partner') 
def _get_name(self): #, cr, uid, context=None 
    """ Get name field value 
    """ 
    #if context is None: 
     #context = {} 
    #ctx = self._context.get() 
    partner_obj = self.env['res.partner'] 
    partner = partner_obj.search([('id', '=', 'active')]) 
    partner_o = partner_obj.browse(partner[0]) 
    return partner_o and partner_o.name or False 

Aber immer wenn ich auf diese klicken, es 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/.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_update_name.py", line 37, in <lambda> 
default=lambda s: s._get_name()) 
File "/home/kristian/odoov10/gilda/l10n_ve_fiscal_requirements/wizard/wizard_update_name.py", line 67, in _get_name 
partner = partner_obj.search([('id', '=', 'active')]) #cr, uid, context['active_id'] later added ctx before active_id, now, brackets removed let's see 
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/models.py", line 1497, in search 
res = self._search(args, offset=offset, limit=limit, order=order, count=count) 
File "/home/kristian/odoov10/odoo-10.0rc1c-20161005/odoo/addons/base/res/res_partner.py", line 621, in _search 
count=count, access_rights_uid=access_rights_uid) 
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/models.py", line 4203, in _search 
self._cr.execute(query_str, where_clause_params) 
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/sql_db.py", line 141, in wrapper 
return f(self, *args, **kwargs) 
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/sql_db.py", line 218, in execute 
res = self._obj.execute(query, params) 
DataError: invalid input syntax for integer: "active" 
LINE 1: ...artner"."active" = true) AND "res_partner".id = 'active') ... 

Der Fehler ist in dieser Zeile partner = partner_obj.search([('id', '=', 'active')]) jetzt, ursprünglich active war active_id, weil es einen Datensatz basierend darauf durchsuchen sollte, aber auf dem neuen Odoo v10, das Feld active_id existiert nicht mehr, gibt es einen active einen, aber ich denke, wird in einer anderen Weise verwendet, offensichtlich anders als active_id.

Ich kann immer noch nicht etwas Entsprechendes für dieses Feld auf der v10-Community finden.

Irgendwelche Ideen?

Antwort

1

Die depends Dekoratoren sind hier nicht notwendig. Die neue API search gibt bereits eine RecordSet zurück, so dass Sie nicht mehr suchen müssen. Oder, da Sie die ID bereits im Kontext haben, verwenden Sie einfach Durchsuchen. Ich würde beiden Methoden wandert wie:

@api.multi 
def set_name(self): 
    """ Change value of the name field """ 
    self.ensure_one() 
    if not self.sure: 
     raise UserError(
      _("Error!"), 
      _("Please confirm that you want to do this by checking the" 
      " option")) 

    partner_obj = self.env['res.partner'] 

    partner_obj.browse(self.env.context.get('active_id', 0).write(
     {'name': self.name}) 
    return {} 

@api.model # default methods don't work on records 
def _get_name(self): 
    """ Get name field value """ 
    partner = self.env['res.partner'].browse(
     self.env.context.get('active_id', 0)) 
    return partner.name if partner else False 
+0

Mann, wirklich genial, sprachlos, vielen Dank, ich ' Ich komme zu einem guten Punkt, und es wird mir auch für andere Module dienen, Danke nochmals – NeoVe

1

Sie können keine Ganzzahlfelder mit der Zeichenfolge durchsuchen.

Sie können aktive IDs aus der Kontextvariablen abrufen, um nach ausgewählten Partnern zu suchen.

Um active_id Verwendung folgenden Code

self._context.get('active_ids') 

** hier ist man Verfahren mit Korrektur **

@api.depends(your_field_name) 
def _get_name(self): 
    partner_obj = self.env['res.partner'] 
    partner = partner_obj.search([('id', '=',self._context.get('active_ids'))],limit=1) 
    return partner and partner.name or False 

Dies kann Ihnen helfen, zu bekommen.

+0

Hallo Jignesh, danke wieder Sie, sagt, es ProgrammingError: nicht Typen anpassen ‚res.partner‘ :(es ist ein seltsamer Fehler, den Code für mich ok ist .. . – NeoVe

+0

hast du res.partner im @ api.depend geschrieben also –

+0

musst du richtig machen –

Verwandte Themen