Odoo 10:向产品表单添加额外字段

Odoo 10: Add extra fields to the product form

我想在产品表单中添加几个额外的字段,就在 'standard_price' 之后。

我创建了一个继承自 "product.product_template_form_view" 的视图并在那里添加了我的字段:

<field name="standard_price" position="after">
        <field name="my_field" />
</field>

然后我重新启动 odoo 更新模块,但是当我调用产品表单时我没有看到我的新字段。

字段出现在数据库模型上(也创建继承模型),但不出现在用户界面上。

我在这里缺少什么?

检查这些东西:

  • 继承自正确的基本形式product.template.common.form
  • 确保您查看的是 product.template(产品)的正确表格,而不是 product.product(产品变体)。
  • 您在编辑模式下是否看到没有标题的输入字段?如果是这种情况,您可能在 html 级别破坏了结构。下一个项目符号将解决这个问题。
  • Standard_price 字段具有独特的 html 结构,因为它可以连接计量单位 (uom)。尝试连接到简单字段或使用容器 div standard_price_uom 进行连接,请参阅下面的模板代码。

在 standard_price_uom div:

之后带有新字段的工作视图的模板代码
<div name='standard_price_uom' position="after">
  <field name="my_field" />
</div>

如果这些没有帮助,请提供完整的视图定义。

确保使用正确的型号。使用 product.template 而不是 product.product.

<record id="product_template_form" model ="ir.ui.view">
    <field name="name">product.template.form</field>
    <field name="model">product.template</field>
    <field name="inherit_id" ref="product.product_template_form_view" />
    <field name="arch" type="xml">
        <field name="standard_price" position="after">
            <field name="my_field"/>
        </field>
    </field>
</record>

...

class ProductTemplate(models.Model):
    _inherit = "product.template"

    my_field = fields.Char()

确保您已将 XML 文件添加到模块的 __manifest__.py 文件中。 Odoo 仅从您指定的文件中提取 XML。

您可以在任何核心模块上看到这方面的示例。有关示例,请参见 sale/__manifest__.py

在你的模块上,它会是这样的:

{
    ...
    ‘data’: [
        ‘views/form/form_product.xml’,
    ]
    ...
}

我已经在 Odoo 12 中测试过了。

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <record id="view_product_template_common_form_inherit" model="ir.ui.view">
        <field name="name">product.template.common.form.inherit</field>
        <field name="model">product.template</field>
        <field name="inherit_id" ref="product.product_template_form_view"/>
        <field name="arch" type="xml">
            <xpath expr="//div[@name='standard_price_uom']" position="after">
                <label for="my_field" string="My Field"/>
                <div>
                    <field name="my_field"/>
                </div>
            </xpath>
        </field>
    </record>
</odoo>