我很难让@ api.onchange工作。
这是我的文件
初始化的.py
from . import models
清单的.py
# -*- coding: utf-8 -*-
{
'name': "Sales Test",
'description': 'test description',
'depends': ['sale'],
'category': 'Test',
'data': [
'views/templates.xml',
],
'installable': True,
'application': False,
'auto_install': False,
}
init .py(模型目录下的文件)
from . import partner
partner.py(模型目录下的文件)
# -*- coding: utf-8 -*-
from odoo import models, fields, api
class MyPartner(models.Model):
_inherit = 'res.partner'
@api.onchange('country_id')
def _onchange_country_id(self):
self.name = 'OnChange'
@api.onchange('street', 'zip')
def _onchange_street(self):
self.street = 'Test Street'
return {
'warning': {
'title': "Some changes happened",
'message': "onchange working, bravo!!!",
}
},
模块安装没有任何问题,视图也根据templates.XML进行了更改,但是当字段(street,country_id或zip)发生更改时没有任何反应
答案 0 :(得分:1)
在return语句结束时,您写了,
这是错误的。其他那么你的代码对我来说似乎很好。只需确保安装完美。
我分享了我的onchange()方法代码的风格。
@api.onchange('street', 'zip')
def _onchange_street(self):
self.street = 'Test Street'
warning = {}
result = {}
warning = {
'title': _('Some changes happened!'),
'message': _('onchange working, bravo!!!'),
}
if warning:
result['warning'] = warning
return result
注:
这些要求导入_
例如。
from odoo import models, fields, api, _
答案 1 :(得分:1)
我还试图进行简单的自定义日志记录,它也不起作用......
# -*- coding: utf-8 -*-
from odoo import models, fields, api, _
class MyPartner(models.Model):
_inherit = 'res.partner'
@api.onchange('street', 'zip')
def _onchange_street(self):
save_path = 'C:/temp/odoo.txt'
file1 = open(save_path, "w")
toFile = raw_input("street field changed!")
file1.write(toFile)
file1.close()
self.street = 'Test Street'
warning = {}
result = {}
warning = {
'title': _('Some changes happened!'),
'message': _('onchange working, bravo!!!'),
}
if warning:
result['warning'] = warning
return result
尝试重启服务也没有帮助!
答案 2 :(得分:1)
首先导入model和api来尝试这个:
来自openerp import api,fields,models,_
对于odoo 10,您必须在您尝试应用onchange的字段中调用您的onchange函数,例如。
@api.onchange('product_id')
def _onchange_product_pack_name(self):
res = self.product_id.product_pack
if res:
return {'domain': {'pack_id': [('id', 'in', [v.id for v in res])]}}
test = fields.Many2one('product.product',string="Pack Products",change_default=True, default=_onchange_action_product_add )
答案 3 :(得分:0)
试试这个:
@api.onchange('country_id')
@api.depends('country_id')
def _onchange_country_id(self):
print'Am here!!'
self.name = 'OnChange'