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

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

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

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

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

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

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


person Cleber Goncalves    schedule 05.05.2018    source источник
comment
На какой модели вы добавляли поля? Вы понимаете концепцию шаблонов и вариантов продуктов Odoos?   -  person CZoellner    schedule 07.05.2018
comment
@CZoellner Не уверен, что я это полностью понимаю, у вас есть ссылки?   -  person Cleber Goncalves    schedule 08.05.2018
comment
Об этом уже был вопрос :-)   -  person CZoellner    schedule 08.05.2018


Ответы (4)


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

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

Код шаблона для рабочего вида с новым полем после div standard_price_uom:

<div name='standard_price_uom' position="after">
  <field name="my_field" />
</div>

Если это не помогает, предоставьте полное определение вида.

person Veikko    schedule 06.05.2018
comment
Это сработало. У вас есть справочный документ о том, как найти «правильную базовую форму»? - person Cleber Goncalves; 08.05.2018
comment
На самом деле у вас очень хороший вопрос. У меня нет справочного документа. Я искал standard_price и нашел базовую структуру для формы и унаследовал от нее. Я полностью согласен с тем, что у нас должна быть документация Odoo по этому поводу. Это сделало бы жизнь немного проще. - person Veikko; 08.05.2018

Убедитесь, что вы используете правильную модель. Используйте 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()
person Kenly    schedule 06.05.2018
comment
Это зависит от того, как вы используете продукты в Odoo. Вы всегда должны учитывать, относятся ли поля к шаблону или варианту. На этот вопрос сначала должен ответить спрашивающий. - person CZoellner; 07.05.2018
comment
@CZoellner Он использовал product_template_form_view. - person Kenly; 07.05.2018
comment
Да, я не говорю, что ваш ответ неправильный, но вопрос не совсем ясен ;-) - person CZoellner; 07.05.2018
comment
Оказалось, что в моем коде было 3 ошибки, я использовал продукт «варианты» с моделью базы данных «продукт», унаследовал от неправильной формы и имел проблемы при отображении поля из-за природы «standard_price», как указано @ Вейкко о принятом ответе. - person Cleber Goncalves; 08.05.2018
comment
@CZoellner Да, я согласен с этим, и спасибо за ваш комментарий. - person Kenly; 08.05.2018
comment
@CleberGoncalves Я разместил это, поскольку ваш вопрос не был достаточно ясным, чтобы понять, что вы действительно хотите делать, и я рад, что вы нашли хороший ответ на свой вопрос. - person Kenly; 08.05.2018

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

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

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

{
    ...
    ‘data’: [
        ‘views/form/form_product.xml’,
    ]
    ...
}
person travisw    schedule 06.05.2018

Я тестировал это в 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>
person Mustafa Tufan    schedule 21.06.2019