Странная ошибка разбора в демо.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>
656   2  

2 ответов:

Есть несколько символов, которые нельзя использовать в XML-литералах. Апостроф ' - один из них.

Вместо этого используйте значение escape, например &apos; или &#39;.

Вы можете найти больше об этом наспецификации .

Я решил ее. Я использовал инструмент строительные леса для создания структуры моего модуля, как описано в официальной документации. Инструмент "строительные леса" создает следующую структуру:

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

    Ничего не найдено.