Модуль миграции с 10 на 12

Я пытаюсь перенести модуль с Odoo 10 на 12, но он показывает мне эту ошибку, и я не понимаю, почему:

Field 'state' used in attributes must be present in view but is missing

Не могли бы вы помочь мне решить эту проблему:

Field 'state' used in attributes must be present in view but is missing:
 - 'state' in attrs = "{'invisible': ['|','|',('journal_entry_ids', '!=', []), ('state', '=', 'confirm'),('type', '!=', 'bank')]}"
 - 'state' in attrs = "{'invisible': ['|','|',('journal_entry_ids', '=', []), ('state', '=', 'confirm'),('type', '!=', 'bank')]}"

Error context:
View `account.bank.statement.form.reconciliation`
[view_id: 1684, xml_id: n/a, model: account.bank.statement, parent_id: 462]
None while parsing /home/PycharmProjects/Odoo12/bank_reconciliation/views/account_view.xml:4, near
<record id = "view_bank_statement_form_reconciliation" model = "ir.ui.view">
    <field name = "name">account.bank.statement.form.reconciliation</field>
    <field name = "model">account.bank.statement</field>
    <field name = "inherit_id" ref = "account.view_bank_statement_form"/>
    <field name = "arch" type = "xml">
        <data>
            <field name = "date" position = "after">
                <field name = "type" invisible = "1"/>
            </field>
            <xpath expr = "//button[1]" position = "attributes">
                <attribute name = "attrs">{'invisible': [('type', '!=', 'cash')]}</attribute>
            </xpath>
            <xpath expr = "//field[@name='line_ids']/tree/field[@name='bank_account_id']" position = "after">
                <field name = "type" invisible = "1"/>
                <button name = "select_account_move_line" type = "object" icon = "fa-registered" attrs = "{'invisible': ['|','|',('journal_entry_ids', '!=', []), ('state', '=', 'confirm'),('type', '!=', 'bank')]}"/>
            </xpath>
            <xpath expr = "//field[@name='line_ids']/tree/field[@name='bank_account_id']" position = "after">
                <button name = "cancel_reconciliation" type = "object" icon = "fa-chain-broken" attrs = "{'invisible': ['|','|',('journal_entry_ids', '=', []), ('state', '=', 'confirm'),('type', '!=', 'bank')]}"/>
            </xpath>
            <xpath expr = "//field[@name='line_ids']" position = "inside">
                <form string = "Statement Line" create = "false">
                    <group col = "4">
                        <field name = "statement_id"/>
                        <field name = "date"/>
                        <field name = "name"/>
                        <field name = "ref"/>
                        <field name = "partner_id"/>
                        <field name = "amount"/>
                        <field name = "journal_currency_id" invisible = "1"/>
                        <field name = "sequence"/>
                        <field name = "note"/>
                </group>
                    <notebook colspan = "4">
                        <page string = "Ecritures liées">
                            <field name = "move_line_ids">
                                <tree readonly = "1">
                                    <field name = "name"/>
                                    <field name = "account_id"/>
                                    <field name = "move_id"/>
                                    <field name = "date"/>
                                    <field name = "debit" sum = "Débit"/>
                                    <field name = "credit" sum = "Crédit"/>
                                </tree>
                            </field>
                        </page>
                    </notebook>
                </form>
            </xpath>
        </data>
    </field>
</record>

Ошибка говорит о том, что атрибут "состояние" отсутствует в родительском представлении, но он присутствует.

Вот родительский вид:

<record id = "view_bank_statement_form" model = "ir.ui.view">
    <field name = "name">account.bank.statement.form</field>
    <field name = "model">account.bank.statement</field>
    <field name = "priority">1</field>
    <field name = "arch" type = "xml">
        <form string = "Bank Statement">
        <header>
            <field name = "all_lines_reconciled" invisible = "1" />
            <button name = "%(action_bank_reconcile_bank_statements)d" string = "Reconcile" type = "action" class = "oe_highlight" attrs = "{'invisible':['|','|',('all_lines_reconciled','=',True),('line_ids','=',[]),('state', '!=', 'open')]}"/>
            <button name = "check_confirm_bank" string = "Validate" type = "object" class = "oe_highlight" attrs = "{'invisible':['|','|',('all_lines_reconciled','=',False),('line_ids','=',[]),('state', '!=', 'open')]}"/>
            <field name = "state" widget = "statusbar" statusbar_visible = "open,confirm"/>
        </header>
        ...
    </field>
</record>
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
0
752
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда вы пишете что-то вроде этого:

<xpath expr = "//field[@name='line_ids']/tree/field[@name='bank_account_id']" position = "after">
    ...
</xpath>

Все, что вы туда добавляете, связано с комоделью поля x2many line_ids и его древовидным представлением. Поэтому, если вы добавляете новое поле/кнопку с параметром attrs, вы должны убедиться, что атрибуты слева от доменов находятся внутри древовидного представления line_ids, а не внутри формы account.bank.statement.

Таким образом, вы должны добавить состояние поля в древовидное представление поля line_ids:

<xpath expr = "//field[@name='line_ids']/tree/field[@name='bank_account_id']" position = "after">
    <field name = "type" invisible = "1"/>
    <field name = "state" invisible = "1"/>
    <button name = "select_account_move_line" type = "object" icon = "fa-registered" attrs = "{'invisible': ['|','|',('journal_entry_ids', '!=', []), ('state', '=', 'confirm'),('type', '!=', 'bank')]}"/>
    <button name = "cancel_reconciliation" type = "object" icon = "fa-chain-broken" attrs = "{'invisible': ['|','|',('journal_entry_ids', '=', []), ('state', '=', 'confirm'),('type', '!=', 'bank')]}"/>
</xpath>

Кстати, вы повторяете одно и то же xpath дважды, что сбивает с толку и работает медленнее для Odoo, поэтому я сгруппировал его в один, который имеет больше смысла.

Спасибо за разъяснения, теперь понял.

omas 09.04.2019 10:26

Другие вопросы по теме