OPENERP:验证字段arch:View Architecture的XML无效

时间:2014-06-08 13:47:10

标签: openerp

我是OpenERP 7.0编程的新手,当您将此模块导入OpenERP时会出现错误:ValidateError验证字段arch时出错:View Architecture的XML无效!我找不到错误。如果你帮助我,我将非常感激。感谢。

_init_.py

import new_test

_openerp_.py

{
    'name': 'New Test demo',
    'version': '1.0',
    'author': 'nasr2ldin',
    'category': 'Human Resources',
    'summary': 'Document  registration',
    'website': '',
    'description': """
This is a New Test demo Module by nasr2ldin
""",
    'images': [],
    'depends': ['base','hr', 'base_calendar'],
    'init_xml': [],
    'update_xml': ['new_test_view.xml'],
    'installable': True,
    'application': True,
    'auto_install': False,

}

new_test.py

import datetime
import time
from itertools import groupby
from operator import itemgetter

import math
from openerp.osv import fields, osv
from openerp.tools.translate import _

def _employee_get(obj, cr, uid, context=None):
    if context is None:
        context = {}
    ids = obj.pool.get('hr.employee').search(cr, uid, [('user_id', '=', uid)], context=context)
    if ids:
        return ids[0]
    return False


class new_test(osv.osv):
    _name = "new_test.register"
    _description = "New Test Demo"
    _columns = {
        'new_test_name': fields.char('User Name',size=256),
        'new_test_desc': fields.selection([('18-20','18-20'),('20-30','20-30')],'User Age.'),
        'new_test_about': fields.char('About'),
        'new_test_date': fields.date('Date')
   }

new_test()

new_test_view.xml

<?xml version="1.0" encoding="utf-8"?>
    <openerp>
        <data>
            <record id="new_test_form" model="ir.ui.view">
                <field name="name">new_test.line.form</field>
                <field name="model">new_test.register.</field>
                <field name="type">form</field>
                <field name="arch" type="xml">
                    <form string="New Test" version="7.0">
                        <field name="sequence" invisible="1"/>
                        <field name="new_test_employee"/>
                        <field name="new_test_name"/>
                        <field name="new_test_desc"/>
                        <field name="new_test_about"/>
                        <field name="new_test_date"/>
                    </form>
                </field>
            </record>

            <record  id="new_test_tree" model="ir.ui.view">
                <field name="name">new_test.tree</field>
                <field name="model">new_test.register</field>
<!--                <field name="type">tree</field>
 -->                <field name="arch" type="xml">
                    <tree string="New_test" colors="blue:state=='draft'">
                        <field name="employee_id"/>
                        <field name="department_id" invisible="1"/>
                        <field name="user_id" invisible="1"/>
                        <field name="new_test_name"/>
                        <field name="new_test_desc"/>
                        <field name="new_test_about"/>
                        <field name="new_test_date"/>
                    </tree>
                </field>
            </record>

            <record model="ir.actions.act_window" id="action_penalty">
                <field name="name">new_test</field>
                <field name="res_model">new_test.register</field>
                <field name="view_type">form</field>
                <field name="view_mode">tree,form</field>

            </record>

            <menuitem id="new_test_register" name="New Test Register" parent="hr.menu_hr_root" sequence="25"/>
            <menuitem id="new_test_register_main" name="New Test register" parent="new_test_register" action="action_new_test" sequence="20"/>

        </data>
    </openerp>

3 个答案:

答案 0 :(得分:1)

问题:

  1. 您的表单和树视图中包含不在您的模型上的字段。与Quentin的答案一样,将这些字段添加到模型中。如果您的模型包含员工ID,并且您希望在树视图中显示员工的部门(例如),请将相关字段添加到模型中并将其放在视图上。

  2. 您正在为状态着色树。这很好但你需要在模型中添加一个状态字段,它必须在树视图中,尽管它可以是不可见的(例如<field name="status" invisible="1"/>)。

  3. new_test_form记录的model字段中,您有new_test.register.;删除尾随.

  4. 一些有用的提示:

    1. update_xml文件中使用__openerp.py__已弃用于7,请改用data

    2. 您的模型应该继承osv.Model(或osv.TransientModel)。旧的osv和内存已被弃用。

    3. new_test_about是一个char,所以应该有一个大小。可能有一个默认但我不记得了,如果有它会很大,所以你应该放一个。

    4. 从OpenERP 6.1+开始,您不再需要实例化模型,因此可以放弃new_test()行。

    5. 作为一般的样式规则,混合ORM类和模块级别并不是一个好主意,因为您将拥有不一致的代码。在课程中移动_employee_get并将其作为self.pool.get('new_test.register')._employee_get

    6. 进行访问
    7. 在7中,您的视图中的<field name="type"...已弃用。

答案 1 :(得分:0)

您应该在“new_test”类的“_columns”中定义这些字段:

  • 序列
  • new_test_employee
  • EMPLOYEE_ID
  • 部门标识
  • USER_ID

然后,更新此模块。

答案 2 :(得分:0)

您错误地使用了表单视图中定义的对象模型。<field name="model">new_test.register.</field>这是错误的,它应该是<field name="model">new_test.register</field>

  • 您所犯的另一个错误是您使用了 new_test.register 类中未定义的字段,因此您必须在_coulmns中添加所有这些字段,然后在视图中使用它。

  • 由于您不熟悉OpenERP,请确保在改进这些内容之后,重新启动服务器以更新python更改(即将新字段注册到相应的表)并更新模块以应用xml视图更改。 / p>

  • sequence,new_test_employee,employee_id,department_id是在表单视图和树视图中定义的字段,在对象中不存在。所以添加对象。

  • 你也错误地写了这个方法。有关详细信息,请查看此link

希望这会对你有所帮助。

相关问题