odoo 10 - @api.onchange

4

我发现使用@api.onchange有困难。

以下是我的文件:

init.py

from . import models

manifest.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 (file under models directory)

from . import partner

partner.py (位于models目录下的文件)

# -*- 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进行了修改,但是当字段(街道、国家ID或邮政编码)发生更改时,没有任何反应。


关于一个警告怎么样? - khelili miliana
你已经尝试过使用@api.constrains('street')了吗? - lucky kurniawan
4个回答

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

我还尝试过制作一个简单的自定义日志记录,但它也不起作用...

# -*- 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

尝试重新启动服务,但没有帮助!

1

首先导入model和api:

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

0

试试这个:

@api.onchange('country_id')
@api.depends('country_id')
def _onchange_country_id(self):
    print'Am here!!'
    self.name = 'OnChange'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接