我是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>
答案 0 :(得分:1)
问题:
您的表单和树视图中包含不在您的模型上的字段。与Quentin的答案一样,将这些字段添加到模型中。如果您的模型包含员工ID,并且您希望在树视图中显示员工的部门(例如),请将相关字段添加到模型中并将其放在视图上。
您正在为状态着色树。这很好但你需要在模型中添加一个状态字段,它必须在树视图中,尽管它可以是不可见的(例如<field name="status" invisible="1"/>
)。
在new_test_form
记录的model
字段中,您有new_test.register.
;删除尾随.
。
一些有用的提示:
在update_xml
文件中使用__openerp.py__
已弃用于7,请改用data
。
您的模型应该继承osv.Model
(或osv.TransientModel
)。旧的osv和内存已被弃用。
列new_test_about
是一个char,所以应该有一个大小。可能有一个默认但我不记得了,如果有它会很大,所以你应该放一个。
从OpenERP 6.1+开始,您不再需要实例化模型,因此可以放弃new_test()
行。
作为一般的样式规则,混合ORM类和模块级别并不是一个好主意,因为您将拥有不一致的代码。在课程中移动_employee_get
并将其作为self.pool.get('new_test.register')._employee_get
在7中,您的视图中的<field name="type"...
已弃用。
答案 1 :(得分:0)
您应该在“new_test”类的“_columns”中定义这些字段:
然后,更新此模块。
答案 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。
希望这会对你有所帮助。