在many2one Odoo 8中显示自定义字段值而不是名称

时间:2016-11-04 11:24:29

标签: odoo-8

我在 res.partner

中有一个名为'code'的自定义字段
class cust_partner
   _inherit = 'res.partner'
   _columns = { 'code': fields.char('Code', index=True), }

自定义 name_get,name_search 获取代码而非客户名称的方法。

仅适用于搜索和显示字段

中的名称

在我的自定义课程中:

class test_order(osv.Model):
    _inherit = 'test_order'
    _columns = {'customer_code': fields.many2one('res.partner', 'Code', ondelete='restrict', required=False), }

我的预期输出是在test_order类中我需要在字段customer_code中显示'code'的值而不是name(在表单视图中保存后)。

2 个答案:

答案 0 :(得分:0)

请尝试使用此test_order类。

# -*- coding: utf-8 -*-
from openerp import models, fields, api, _
class test_order(models.Model):
   _inherit = 'test_order'

   @api.multi
   @api.depends("partner_id")
   def _compute_customer_code(self):
       for o in self:
           o.customer_code = o.partner_id.code

   customer_code = fields.Char('Code',compute=_compute_customer_code)
   partner_id = fields.Many2one('res.partner','Customer')

如果您现在填写partner_id-field。 customer_code-field将自动获取客户的代码值。

答案 1 :(得分:0)

您可以从javascript代码更改displyaed值:

openerp.custom_module = function(instance){

var _t = instance.web._t,
    _lt = instance.web._lt;
var QWeb = instance.web.qweb;

openerp.custom_module.CustomFieldMany2One = openerp.web.form.FieldMany2One.extend(
    {
    set_value: function(value_) {
        this._super(value_);
        var self = this;
        var context = this.build_context().eval();
        var model_obj = new instance.web.Model(this.field.relation);
        model_obj.call('read', [value_[0], ['code'], context]).then(function (res) {
            if ('code' in res)
            {
                self.display_string(res['code']);
            }
        });
    },
});
openerp.web.form.widgets.add('custommany2one', 'openerp.custom_module.CustomFieldMany2One');
}

在xml中使用widget属性:

<field name='customer_code'  widget="custommany2one"/>