簡體   English   中英

DataError:整數的無效輸入語法:“活動”-Odoo v8到Odoo v10社區

[英]DataError: invalid input syntax for integer: “active” - Odoo v8 to Odoo v10 community

這些方法應該在表單視圖上更新res.partner名稱,它會打開一個新窗口,顯示伙伴名稱,以及一個用於更新它的按鈕。

最初在v8上看起來像這樣:

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

經過反省后,現在看起來像這樣:

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')]) ,最初activeactive_id ,因為它應基於該記錄瀏覽一個記錄,但基於新的Odoo v10 ,該字段active_id不再存在,有一個active字段,但是我認為它以其他方式使用,顯然不同於active_id

在v10社區上,我仍然找不到與該領域相當的產品。

有任何想法嗎?

您不能使用字符串搜索整數字段。

您可以從上下文變量中獲取活動ID,以搜索選定的合作伙伴。

要獲取active_id,請使用以下代碼

self._context.get('active_ids')

**這是您的校正方法**

@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

這可能對您有幫助。

在這里不需要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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM