在 One2many 小部件 ODOO 中显示不在模型中的字段的最佳方式

Best way to show fields not in the model in a One2many widget ODOO

我想在表单上显示一列,但我要访问的字段未存储在模型中。 我有以下型号:

class Class1(models.Model):
    _name = 'module.class1'

    field1 = fields.Integer(string='field1')
    field2 = fields.Integer(string='field2')


class Class2(models.Model):
    _name = 'module.class1'

    field1 = fields.Integer(string='field1')
    field2 = fields.Integer(string='field2')
    class3_ids = fields.One2many('module.class3', 'class2_id', string="class2")

class Class3(models.Model):
    _name='module.class3'

    class2_id = fields.Many2one('module.class2')
    class1_id = fields.Many2one('module.class1')
    field1 = fields.Float(string='field1')

我想在 class1 中显示 class2 记录的表单,但显示一些 class1 字段,如下所示:

<record id="module_class1_form" model="ir.ui.view">
    <field name="name">module_class1: form</field>
    <field name="model">module.class1</field>
    <field name="arch" type="xml">
        <form>
            <sheet>
                <group>
                    <field name="number"/>
                    <field name="class3_ids" nolabel="1">
                        <tree string="class3" editable="bottom" nolabel="1">
                          <field name="field1"/>
                          <field name="class1_id"/>
                          <field name="class1_id.SOMEFIELD"/>
                        </tree>
                    </field>
                </group>
            </sheet>
        </form>
    </field>
</record>

代码工作正常,除了我想访问和显示来自 class1 的数据的部分 我正在考虑使用计算字段,但这是一种更 pythonic 的方式吗?

谢谢

使用related字段。在您的模型中:

class Class3(models.Model):
    _name='module.class3'

    class2_id = fields.Many2one('module.class2')
    class1_id = fields.Many2one('module.class1')
    field1 = fields.Float(string='field1')
    class1field1 = fields.Integer(related='class1_id.field1')

并且在视图中:

<field name="class1field1"/>