在 odoo 13 中调用 xml 中的 python 函数来设置表单视图的属性

Call python function in xml for set attribute of form view in odoo 13

我有一个表单视图,我想为其动态设置创建和编辑属性。 这是我的表单查看记录:

 <record model="ir.ui.view" id="estate_property_type_form">
            <field name="name">estate_property_type_form</field>
            <field name="model">estate.property.type</field>
            <field name="arch" type="xml">
                <form>
                    <sheet>
                           some fileds...
                    </sheet>
                </form>
            </field>
        </record>

我使用 xpath 标签在那里设置创建和编辑属性,但我无法在 estate.property.type 模型中调用我的函数,这里是我设置属性的记录: '''

<record id="changing_attrs" model="ir.ui.view">
            <field name="name">changing attrs</field>
            <field name="model">estate.property.type</field>
            <field name="inherit_id" ref="estate_property_type_form"/>
            <field name="arch" type="xml">
                <xpath expr="//form" position="attributes">
                    <attribute name="create">model_estate_property_type_form.test()</attribute>
                </xpath>
            </field>
        </record>

在测试函数中,我做了一些逻辑,return 判断真假。 我还在属性标签之间尝试了 user.env['estate.property.type'].test(), estate.property.type.test() 和 test() 但它没有用。谁能帮我在这里调用我的函数或者告诉我另一种动态设置表单属性的方法?????

您可以使用fields_view_get方法。正确替换 YourClassyour_text()

@api.model
def fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False):
    res = super(YourClass, self).fields_view_get(
        view_id=view_id, view_type=view_type, toolbar=toolbar, submenu=submenu
    )
    doc = etree.XML(res['arch'])
    if view_type == 'form' and self.your_test():
        for node in doc.xpath('//{}'.format(view_type)):
            node.set('create', '0')
    res['arch'] = etree.tostring(doc, encoding='unicode')
    return res

希望这个回答能对您有所帮助。