【问题标题】:OpenErp Wizard - Invalid XML for View ArchitectureOpenErp 向导 - 视图架构的 XML 无效
【发布时间】:2014-02-08 11:39:41
【问题描述】:

我正在学习如何在 OpenERP v7 上开发模块。在我尝试添加向导之前一切正常:OpenERP 不会接受我的视图架构,我不知道为什么!

模块架构是:

  • _init.py_(我在这里导入 module.py 和向导)
  • _openerp.py_(依赖项:Base;数据:view/view.xml;wizard/wizard.xml)
  • module.py(我有主代码,一切正常)
  • view/view.xml(主视图与主代码一致,没问题)
  • wizard/_init.py_(导入向导)
  • wizard/wizard.py(代码如下)
  • wizard/wizard.xml(代码如下)

这是wizard.py文件:

# -*- coding: utf-8 -*-
from openerp.osv import fields, osv

class idea_wizard(osv.TransientModel):
    _name = 'idea.wizard'
    _columns = {
                'idea_age': fields.integer('Age'),
                }

这里是wizard.xml文件:

<?xml version="1.0"?>
<openerp>
    <data>
        <!-- Idea Category Form View -->
        <record model="ir.ui.view" id="view_idea_wizard_form">
            <field name="name">idea.wizard.form</field>
            <field name="model">idea.wizard</field>
            <field name="arch" type="xml">
                <form string="Cleanup" version="7.0">
                    <field name="idea_age"/>
                </form>
            </field>
        </record>
    </data>
</openerp>

目前这一切都是基本的,但我希望它能够正常工作,这样我就可以在它的基础上进行构建......

这是服务器回溯:

Server Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.7/openerp/addons/web/session.py", line 89, in send
return openerp.netsvc.dispatch_rpc(service_name, method, args)
  File "/usr/lib/pymodules/python2.7/openerp/netsvc.py", line 292, in dispatch_rpc
result = ExportService.getService(service_name).dispatch(method, params)
  File "/usr/lib/pymodules/python2.7/openerp/service/web_services.py", line 622, in dispatch
security.check(db,uid,passwd)
  File "/usr/lib/pymodules/python2.7/openerp/service/security.py", line 40, in check
pool = pooler.get_pool(db)
  File "/usr/lib/pymodules/python2.7/openerp/pooler.py", line 49, in get_pool
return get_db_and_pool(db_name, force_demo, status, update_module)[1]
  File "/usr/lib/pymodules/python2.7/openerp/pooler.py", line 33, in get_db_and_pool
registry = RegistryManager.get(db_name, force_demo, status, update_module)
  File "/usr/lib/pymodules/python2.7/openerp/modules/registry.py", line 203, in get
update_module)
  File "/usr/lib/pymodules/python2.7/openerp/modules/registry.py", line 233, in new
openerp.modules.load_modules(registry.db, force_demo, status, update_module)
  File "/usr/lib/pymodules/python2.7/openerp/modules/loading.py", line 350, in load_modules
force, status, report, loaded_modules, update_module)
  File "/usr/lib/pymodules/python2.7/openerp/modules/loading.py", line 256, in load_marked_modules
loaded, processed = load_module_graph(cr, graph, progressdict, report=report, skip_modules=loaded_modules, perform_checks=perform_checks)
  File "/usr/lib/pymodules/python2.7/openerp/modules/loading.py", line 188, in load_module_graph
load_data(module_name, idref, mode)
  File "/usr/lib/pymodules/python2.7/openerp/modules/loading.py", line 76, in <lambda>
load_data = lambda *args: _load_data(cr, *args, kind='data')
  File "/usr/lib/pymodules/python2.7/openerp/modules/loading.py", line 124, in _load_data
tools.convert_xml_import(cr, module_name, fp, idref, mode, noupdate, report)
  File "/usr/lib/pymodules/python2.7/openerp/tools/convert.py", line 954, in convert_xml_import
obj.parse(doc.getroot())
  File "/usr/lib/pymodules/python2.7/openerp/tools/convert.py", line 847, in parse
self._tags[rec.tag](self.cr, rec, n)
  File "/usr/lib/pymodules/python2.7/openerp/tools/convert.py", line 814, in _tag_record
id = self.pool.get('ir.model.data')._update(cr, self.uid, rec_model, self.module, res, rec_id or False, not self.isnoupdate(data_node), noupdate=self.isnoupdate(data_node), mode=self.mode, context=rec_context )
  File "/usr/lib/pymodules/python2.7/openerp/addons/base/ir/ir_model.py", line 967, in _update
res_id = model_obj.create(cr, uid, values, context=context)
  File "/usr/lib/pymodules/python2.7/openerp/addons/base/ir/ir_ui_view.py", line 103, in create
return super(view, self).create(cr, uid, values, context)
  File "/usr/lib/pymodules/python2.7/openerp/osv/orm.py", line 4493, in create
self._validate(cr, user, [id_new], context)
  File "/usr/lib/pymodules/python2.7/openerp/osv/orm.py", line 1561, in _validate
raise except_orm('ValidateError', '\n'.join(error_msgs)) except_orm: ('ValidateError', u'Error occurred while validating the field(s) arch: Invalid XML for View Architecture!')

如果我清空wizard.xml 文件中的“arch”标签,那么服务器不会引发任何错误。但我不明白我的架构出了什么问题。

感谢您的帮助:)

【问题讨论】:

  • 请添加完整的回溯或日志

标签: python xml openerp openerp-7


【解决方案1】:

简答

确保您的 XML 文件以 utf-8 编码保存。在您的 xml 定义中添加 encoding 属性:

 <?xml version="1.0" encoding="utf-8"?>

希望这会有所帮助。

详情

一般来说,OpenERP中的数据验证主要是通过每个模型的_constraints属性中设置的方法来处理的。在您的情况下,您在尝试创建新的 ir.ui.view 对象时遇到错误。查看base/ir/ir_ui&gt;view.py 文件,您可以看到以下内容:

_constraints = [
    (_check_xml, 'Invalid XML for View Architecture!', ['arch'])
]

这里我们只定义了一个约束,它由_check_xml 方法评估。查看此方法,您可以看到除了 XML 本身的有效性之外,还进行了编码测试。 OpenERP 6.0 中不存在该测试。这意味着您的视图可能会在 OpenERP 6.0 下正确呈现。

如果您愿意,可以通过在 view 类的 __check_xml 方法中放置断点来进一步调查。

【讨论】:

  • 您好安德烈,感谢您的回答。我添加了编码,但没有任何改变......错误消息不是“视图架构的无效 XML”,因为 _check_xml 函数会触发。但它来自orm的_validate函数。我要检查一下这个功能。无论如何感谢您的帮助;)
  • 好的,但是您的堆栈跟踪准确显示“视图架构的 XML 无效”:)
【解决方案2】:

更改您的模型名称意味着给出您要放置它的类的名称

<field name="model">test.wizard</field>

点击here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    相关资源
    最近更新 更多