Odoo 10: добавьте дополнительные поля в форму продукта

Я хочу добавить пару дополнительных полей в форму продукта, сразу после 'standard_price'.

Я создал представление, которое наследуется от "product.product_template_form_view", и добавил туда свои поля:

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

Затем я перезапускаю odoo, обновляя модуль, но я не вижу свои новые поля при вызове формы продукта.

Поля появляются в модели базы данных (также создаются унаследованные модели), но не в пользовательском интерфейсе.

Что мне здесь не хватает?

3 ответа

Решение

Проверьте эти вещи:

  • Наследуется от правильной базовой формы product.template.common.form
  • Убедитесь, что вы ищете правильную форму для product.template (Product), а не product.product (Вариант продукта).
  • Вы видите поле ввода без заголовка в режиме редактирования? Если это так, вы можете иметь нарушенную структуру на уровне HTML. Следующая пуля решит это.
  • Поле Standard_price имеет уникальную html-структуру, потому что с ним может быть связана единица измерения (uom). Попробуйте подключиться к простому полю или используйте контейнер div standard_price_uom для подключения, см. Код шаблона ниже.

Код шаблона для рабочего представления с новым полем после стандартного div_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()

Я тестировал это в 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>

Убедитесь, что вы добавили свой XML-файл в модуль __manifest__.py файл. Odoo извлекает XML только из файлов, которые вы ему сообщаете.

Вы можете увидеть примеры этого на любых основных модулях. Увидеть sale/__manifest__.py для примера.

На вашем модуле это будет примерно так:

{
    ...
    ‘data’: [
        ‘views/form/form_product.xml’,
    ]
    ...
}
Другие вопросы по тегам