【问题标题】:Display custom field value instead of name in many2one Odoo 8在 many2one Odoo 8 中显示自定义字段值而不是名称
【发布时间】:2018-01-24 16:11:10
【问题描述】:

我在 res.partner 中有一个名为“代码”的自定义字段:

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 中显示“代码”的值而不是名称(保存在表单视图中之后)。

【问题讨论】:

    标签: odoo-8


    【解决方案1】:

    试试这个 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 字段。 customer_code-field 将自动从客户那里获取代码值。

    【讨论】:

    • 这会起作用,但我不想要 2 个字段,我期待 partner_id = code (default name) 的输出
    • 模型的默认名称可以通过
    • _rec_name = 'code' 在您的 class cust_partner 课程中。但是你会在任何地方得到代码而不是名称。和_inherit一样。
    【解决方案2】:

    您可以从 javascript 代码中更改显示的值:

    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"/>
    

    【讨论】:

    • 我通过自定义 read() ,name_get(),name_search() 方法来做到这一点。谢谢
    猜你喜欢
    • 1970-01-01
    • 2019-08-15
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多