如何在 Odoo 14 的 Many2one 字段中显示多个字段的数据?

问题描述

注册表格中要求网站(2个要求):

我在模型“res.users”和注册表单(网站)中添加一个字段“zone_id”,它将选择区域。我想用区域名称显示一个字段值“zone_status”(一个选择字段),如下所示:

区域 1 - 活动

Zone2 - 活动

Zone3 - 非活动

怎么做?并且还需要指南来显示 Man2one 字段行以从列表中选择,通常在 odoo 自己的 UI 中它会自动显示,但不会在网站页面/表单中显示

目前我将它作为文本,如何修改它以表现/显示为 Many2one 字段:

<div class="form-group field-zone_id">
   <label for="zone_id">Your Zone</label>
   <input type="text" name="zone_id" id="zone_id" class="form-control form-control-sm"/>
</div>

解决方法

对于您的第一个问题,您可以覆盖与您有 m2o 关系的模型中的 name_get 方法,并根据需要配置连接字符串。看下面的例子

def name_get(self):
    return [(record.id,record.name) for record in self]

机队模块示例 link

@api.depends('name','brand_id')
def name_get(self):
    res = []
    for record in self:
        name = record.name
        if record.brand_id.name:
            name = record.brand_id.name + '/' + name
        res.append((record.id,name))
    return res

或者用你的字符串创建一个新的计算域。请参阅以下来自 odoo 产品类别 link

的示例
class ProductCategory(models.Model):
    _name = "product.category"
    #...
    _rec_name = 'complete_name'
    _order = 'complete_name'

    name = fields.Char('Name',index=True,required=True)
    complete_name = fields.Char(
        'Complete Name',compute='_compute_complete_name',store=True)

    #...

    @api.depends('name','parent_id.complete_name')
    def _compute_complete_name(self):
        for category in self:
            if category.parent_id:
                category.complete_name = '%s / %s' % (category.parent_id.complete_name,category.name)
            else:
                category.complete_name = category.

对于第二个问题,您可以像这样读取数据。请参阅以下示例表单 website_sale 模块 link

<div t-attf-class="form-group #{error.get('country_id') and 'o_has_error' or ''} col-lg-6 div_country">
    <label class="col-form-label" for="country_id">Country</label>
    <select id="country_id" name="country_id" t-attf-class="form-control #{error.get('country_id') and 'is-invalid' or ''}">
        <option value="">Country...</option>
        <t t-foreach="countries" t-as="c">
            <option t-att-value="c.id" t-att-selected="c.id == (country and country.id or -1)">
                <t t-esc="c.name" />
            </option>
        </t>
    </select>
</div>