2017-03-22 2 views
0

이러한 메서드는 폼보기에서 res.partner 이름을 업데이트해야하며 파트너 이름을 표시하는 새 창을 열고 업데이트 할 단추를 표시합니다.DataError : 정수의 입력 구문이 잘못됨 : "활성"- Odoo v8 ~ Odoo v10 커뮤니티

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() 

mirgation 후에는 지금과 같이 :

원래 V8에이처럼 보였다

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 

을하지만 매번 나는이 클릭이 발생합니다 :

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') ... 

이 줄에 오류가 있습니다. partner = partner_obj.search([('id', '=', 'active')]) 현재 active은 012입니다.은 그걸 기반으로 한 레코드를 찾아야하기 때문에 새로운 Odoo v10에서는 active_id 필드가 더 이상 존재하지 않으며 active 필드가 있지만 다른 방법으로는 분명히 active_id과 다른 것으로 생각됩니다.

v10 커뮤니티에서이 필드와 동일한 항목을 찾을 수 없습니다.

아이디어가 있으십니까?

답변

1

여기에서는 depends 데코레이터가 필요하지 않습니다. 새로운 API search은 이미 RecordSet을 반환하므로 다시 탐색 할 필요가 없습니다. 또는 컨텍스트에서 이미 ID를 가지고 있으므로 찾아보기 만 사용하십시오. 내가 좋아하는 두 가지 방법 마이그레이션 것 : 다시 한번 감사드립니다,

@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

정말 대단합니다. 감사합니다. 대단히 감사합니다. 이 점에 대해 좋은 지적을하고 있고, 다른 모듈에도 도움이 될 것입니다. 다시 한번 감사드립니다. – NeoVe

1

문자열로 정수 필드를 검색 할 수 없습니다.

컨텍스트 변수에서 활성 ID를 가져와 선택한 파트너를 검색 할 수 있습니다.

이 당신을 도울 수 있습니다 **

@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 

여기 **

self._context.get('active_ids') 

코드

다음
사용을 active_id 얻을 보정하면 방법입니다합니다.

+0

안녕 Jignesh을, 그것은 'ProgrammingError는 : 유형 적응할 수 없다'라고 'res.partner을 :(그것은 이상한 오류입니다, 여러분의 코드가 나에게 괜찮습니다 .. – NeoVe

+0

@ api.depend에 res.partner를 작성 했으므로 –

+0

을 올바르게 작성해야합니다. –