Странная ошибка разбора в демо.XML
Я следую официальному учебнику odoo-9 по построению модулей. Следуя разделу файлы данных , я поместил следующий фрагмент кода в openacademy/demo/demo.xml:
<openerp>
<data>
<record model="openacademy.course" id="course0">
<field name="name">Course 0</field>
<field name="description">Course 0's description
Can have multiple lines
</field>
</record>
<record model="openacademy.course" id="course1">
<field name="name">Course 1</field>
<!-- no description for this one -->
</record>
<record model="openacademy.course" id="course2">
<field name="name">Course 2</field>
<field name="description">Course 2's description</field>
</record>
</data>
</openerp>
Но, когда я пытаюсь установить свой модуль, я сталкиваюсь со следующей ошибкой:
...
File "D:odoo-devodoo-9.0openerptoolsconvert.py", line 630, in _tag_record
model = self.pool[rec_model]
File "D:odoo-devodoo-9.0openerpmodulesregistry.py", line 84, in __getitem__
return self.models[model_name]
ParseError: "openacademy.course" while parsing file:///D:/odoo-dev/odoo-addons/openacademy/demo/demo.xml:3, near
<record model="openacademy.course" id="course0">
<field name="name">Course 0</field>
<field name="description">Course 0's description
Can have multiple lines
</field>
</record>
Обновление
Я полностью удалил апострофы из xml-файла. Но я все равно получаю ту же ошибку.
<openerp>
<data>
<record model="openacademy.course" id="course0">
<field name="name">Course 0</field>
<field name="description">Course 0 description Can have multiple lines
</field>
</record>
<record model="openacademy.course" id="course1">
<field name="name">Course 1</field>
<field name="description">Description 2</field>
</record>
<record model="openacademy.course" id="course2">
<field name="name">Course 2</field>
<field name="description">Course 2 description</field>
</record>
</data>
</openerp>
Ошибка:
...
ParseError: "openacademy.course" while parsing file:///D:/odoo-dev/odoo-addons/openacademy/demo/demo.xml:3, near
<record model="openacademy.course" id="course0">
<field name="name">Course 0</field>
<field name="description">Course 0 description Can have multiple lines
</field>
</record>
2 ответов:
Есть несколько символов, которые нельзя использовать в XML-литералах. Апостроф
Вместо этого используйте значение escape, например'- один из них.'или'.Вы можете найти больше об этом наспецификации .
Я решил ее. Я использовал инструмент строительные леса для создания структуры моего модуля, как описано в официальной документации. Инструмент "строительные леса" создает следующую структуру:
odoo-addons/ |_ openacademy/ |_controllers/ |_demo/ |_models/ | |_ models.py | |_security/ |_views/ |_ __init__.py |_ __openerp__.pyИ в
__init__.pyя поместил следующее, как описано в документации:from . import controllers from . import modelsИ в
demo.xml:<?xml version="1.0" encoding="utf-8"?> <openerp> <data> <record model="ir.actions.act_window" id="course_list_action"> <field name="name">Courses</field> <field name="res_model">openacademy.course</field> <field name="view_type">form</field> <field name="view_mode">tree,form</field> <field name="help" type="html"> <p class="oe_view_nocontent_create">Create the first course</p> </field> </record> <menuitem id="main_openacademy_menu" name="Open Academy"/> <menuitem id="openacademy_menu" name="Open Academy" parent="main_openacademy_menu"/> <menuitem id="courses_menu" name="Courses" parent="openacademy_menu" action="course_list_action"/> </data> </openerp>Как вы можете видеть, поле
res_modelимеет значениеopenacademy.course, которое python не может найти, потому что оно не загружено в файл__init__.py. Меняем его на следующий решенный моя проблема:from controllers import controllers from models import models
Comments