Openerp odoo的外形视图工作不正常

Openerp odoo的外形视图工作不正常,openerp,odoo,Openerp,Odoo,我创建了一个名为student的模块。我有两个表单视图。第一个表单只包含一个重定向到第二个表单的按钮。第二个表单由几个字段组成,如名字、姓氏、出生日期、地址、电话和电子邮件。当我在第一个表单中并且想要重定向到第二个表单时,它会给我一个称为“完整性错误”的错误,这意味着它正在检查非空约束,因为我已经在第二个表单中将first_name和last_name字段设为必填字段。为什么当我在第一个表单中时它会检查第二个表单字段。但如果我将这两个字段设置为非强制性,那么一切都会正常工作。所以我的重定向代码没

我创建了一个名为student的模块。我有两个表单视图。第一个表单只包含一个重定向到第二个表单的按钮。第二个表单由几个字段组成,如名字、姓氏、出生日期、地址、电话和电子邮件。当我在第一个表单中并且想要重定向到第二个表单时,它会给我一个称为“完整性错误”的错误,这意味着它正在检查非空约束,因为我已经在第二个表单中将first_name和last_name字段设为必填字段。为什么当我在第一个表单中时它会检查第二个表单字段。但如果我将这两个字段设置为非强制性,那么一切都会正常工作。所以我的重定向代码没有问题。我不想删除这两个字段上的必需属性。我已经附上了图片和我的代码也

    <record model="ir.ui.view" id="view_student2_form">
        <field name="name">student2.form</field>
        <field name="model">student</field>
        <field name="priority" eval="15"/>
        <field name="type">form</field>
        <field name="arch" type="xml">
        <form string="student">
        <group>
            <field name="first_name" style="width: 40%"/>  
            <field name="name" style="width: 40%"/> 
            <button type="object" string="Form1" name="redirection"/>
        </group>    
        </form>
        </field>
    </record>

    <record model="ir.ui.view" id="view_student_tree">
        <field name="name">student.tree</field>
        <field name="model">student</field>
        <field name="type">tree</field>
        <field name="arch" type="xml">
            <tree string="student">
                <field name="first_name"/>
                <field name="name"/>
                <field name="birth_date"/>
                <field name="address"/>
                <field name="email"/>
                <field name="phone"/>
            </tree>
        </field>
    </record>

    <record model="ir.actions.act_window" id="action_student">
        <field name="name">Student</field>
        <field name="res_model">student</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
    </record>

    <record model="ir.actions.act_window" id="action_student2">
        <field name="name">Student.action2</field>
        <field name="res_model">student</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
        <field name="view_id" ref="view_student_form"/>
    </record>

    <menuitem name="Student/Student" id="menu_student" action="action_student"/>
    <menuitem name="Student" id="menu_student_student_item" parent="menu_student" action="action_student"/>
    </data>
    </openerp>
这是我的python代码

class student(osv.osv):
_name = 'student'
_columns = {
    'first_name': fields.char('First Name',size=30,required=True,    help='first name'),
    'name': fields.char('Last Name',size=30,required=True, help='last name'),
    'birth_date': fields.date('Birth Date',size=30, help='DOB'),
    'address': fields.text('Address',size=100, help='your Address'),
    'email': fields.char('Email',size=50, help='the email'),
    'phone': fields.char('Phone',size=30, help='the phone'),
}

@api.multi
def redirection(self):
    view_id = self.env.ref('student.view_student_form').id
    context = self._context.copy()

    return {
        'name':'student.form',
        'view_type':'form',
        'view_mode':'form',
        'views' : [(view_id,'form')],
        'res_model':'student',
        'view_id':view_id,
        'type':'ir.actions.act_window',
        'res_id':self.id,
        'target':'current',
        'context':context,
    }

@api.multi
def redirection2(self):
    view_id = self.env.ref('student.view_student2_form').id
    context = self._context.copy()

    return {
        'name':'student2.form',
        'view_type':'form',
        'view_mode':'form',
        'views' : [(view_id,'form')],
        'res_model':'student',
        'view_id':view_id,
        'type':'ir.actions.act_window',
        'res_id':self.id,
        'target':'current',
        'context':context,
    }
    <record model="ir.ui.view" id="view_student2_form">
        <field name="name">student2.form</field>
        <field name="model">student</field>
        <field name="priority" eval="15"/>
        <field name="type">form</field>
        <field name="arch" type="xml">
        <form string="student">
        <group>
            <field name="first_name" style="width: 40%"/>  
            <field name="name" style="width: 40%"/> 
            <button type="object" string="Form1" name="redirection"/>
        </group>    
        </form>
        </field>
    </record>

    <record model="ir.ui.view" id="view_student_tree">
        <field name="name">student.tree</field>
        <field name="model">student</field>
        <field name="type">tree</field>
        <field name="arch" type="xml">
            <tree string="student">
                <field name="first_name"/>
                <field name="name"/>
                <field name="birth_date"/>
                <field name="address"/>
                <field name="email"/>
                <field name="phone"/>
            </tree>
        </field>
    </record>

    <record model="ir.actions.act_window" id="action_student">
        <field name="name">Student</field>
        <field name="res_model">student</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
    </record>

    <record model="ir.actions.act_window" id="action_student2">
        <field name="name">Student.action2</field>
        <field name="res_model">student</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
        <field name="view_id" ref="view_student_form"/>
    </record>

    <menuitem name="Student/Student" id="menu_student" action="action_student"/>
    <menuitem name="Student" id="menu_student_student_item" parent="menu_student" action="action_student"/>
    </data>
    </openerp>
Xml代码打开数据标记,openerp没有出现在这里,所以不用担心,它在我的代码中 学生表格 学生 形式


    <record model="ir.ui.view" id="view_student2_form">
        <field name="name">student2.form</field>
        <field name="model">student</field>
        <field name="priority" eval="15"/>
        <field name="type">form</field>
        <field name="arch" type="xml">
        <form string="student">
        <group>
            <field name="first_name" style="width: 40%"/>  
            <field name="name" style="width: 40%"/> 
            <button type="object" string="Form1" name="redirection"/>
        </group>    
        </form>
        </field>
    </record>

    <record model="ir.ui.view" id="view_student_tree">
        <field name="name">student.tree</field>
        <field name="model">student</field>
        <field name="type">tree</field>
        <field name="arch" type="xml">
            <tree string="student">
                <field name="first_name"/>
                <field name="name"/>
                <field name="birth_date"/>
                <field name="address"/>
                <field name="email"/>
                <field name="phone"/>
            </tree>
        </field>
    </record>

    <record model="ir.actions.act_window" id="action_student">
        <field name="name">Student</field>
        <field name="res_model">student</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
    </record>

    <record model="ir.actions.act_window" id="action_student2">
        <field name="name">Student.action2</field>
        <field name="res_model">student</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
        <field name="view_id" ref="view_student_form"/>
    </record>

    <menuitem name="Student/Student" id="menu_student" action="action_student"/>
    <menuitem name="Student" id="menu_student_student_item" parent="menu_student" action="action_student"/>
    </data>
    </openerp>

学生2.表格
学生
形式
学生树
学生
树
学生
学生
形式
树
学生行动2
学生
形式
树

因为您在模型声明中将这些字段定义为必填字段

    <record model="ir.ui.view" id="view_student2_form">
        <field name="name">student2.form</field>
        <field name="model">student</field>
        <field name="priority" eval="15"/>
        <field name="type">form</field>
        <field name="arch" type="xml">
        <form string="student">
        <group>
            <field name="first_name" style="width: 40%"/>  
            <field name="name" style="width: 40%"/> 
            <button type="object" string="Form1" name="redirection"/>
        </group>    
        </form>
        </field>
    </record>

    <record model="ir.ui.view" id="view_student_tree">
        <field name="name">student.tree</field>
        <field name="model">student</field>
        <field name="type">tree</field>
        <field name="arch" type="xml">
            <tree string="student">
                <field name="first_name"/>
                <field name="name"/>
                <field name="birth_date"/>
                <field name="address"/>
                <field name="email"/>
                <field name="phone"/>
            </tree>
        </field>
    </record>

    <record model="ir.actions.act_window" id="action_student">
        <field name="name">Student</field>
        <field name="res_model">student</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
    </record>

    <record model="ir.actions.act_window" id="action_student2">
        <field name="name">Student.action2</field>
        <field name="res_model">student</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
        <field name="view_id" ref="view_student_form"/>
    </record>

    <menuitem name="Student/Student" id="menu_student" action="action_student"/>
    <menuitem name="Student" id="menu_student_student_item" parent="menu_student" action="action_student"/>
    </data>
    </openerp>
您需要从模型声明(从.py文件)中删除
required=True

    <record model="ir.ui.view" id="view_student2_form">
        <field name="name">student2.form</field>
        <field name="model">student</field>
        <field name="priority" eval="15"/>
        <field name="type">form</field>
        <field name="arch" type="xml">
        <form string="student">
        <group>
            <field name="first_name" style="width: 40%"/>  
            <field name="name" style="width: 40%"/> 
            <button type="object" string="Form1" name="redirection"/>
        </group>    
        </form>
        </field>
    </record>

    <record model="ir.ui.view" id="view_student_tree">
        <field name="name">student.tree</field>
        <field name="model">student</field>
        <field name="type">tree</field>
        <field name="arch" type="xml">
            <tree string="student">
                <field name="first_name"/>
                <field name="name"/>
                <field name="birth_date"/>
                <field name="address"/>
                <field name="email"/>
                <field name="phone"/>
            </tree>
        </field>
    </record>

    <record model="ir.actions.act_window" id="action_student">
        <field name="name">Student</field>
        <field name="res_model">student</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
    </record>

    <record model="ir.actions.act_window" id="action_student2">
        <field name="name">Student.action2</field>
        <field name="res_model">student</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
        <field name="view_id" ref="view_student_form"/>
    </record>

    <menuitem name="Student/Student" id="menu_student" action="action_student"/>
    <menuitem name="Student" id="menu_student_student_item" parent="menu_student" action="action_student"/>
    </data>
    </openerp>
'first\u name':fields.char('first name',size=30,help='first name'),

    <record model="ir.ui.view" id="view_student2_form">
        <field name="name">student2.form</field>
        <field name="model">student</field>
        <field name="priority" eval="15"/>
        <field name="type">form</field>
        <field name="arch" type="xml">
        <form string="student">
        <group>
            <field name="first_name" style="width: 40%"/>  
            <field name="name" style="width: 40%"/> 
            <button type="object" string="Form1" name="redirection"/>
        </group>    
        </form>
        </field>
    </record>

    <record model="ir.ui.view" id="view_student_tree">
        <field name="name">student.tree</field>
        <field name="model">student</field>
        <field name="type">tree</field>
        <field name="arch" type="xml">
            <tree string="student">
                <field name="first_name"/>
                <field name="name"/>
                <field name="birth_date"/>
                <field name="address"/>
                <field name="email"/>
                <field name="phone"/>
            </tree>
        </field>
    </record>

    <record model="ir.actions.act_window" id="action_student">
        <field name="name">Student</field>
        <field name="res_model">student</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
    </record>

    <record model="ir.actions.act_window" id="action_student2">
        <field name="name">Student.action2</field>
        <field name="res_model">student</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
        <field name="view_id" ref="view_student_form"/>
    </record>

    <menuitem name="Student/Student" id="menu_student" action="action_student"/>
    <menuitem name="Student" id="menu_student_student_item" parent="menu_student" action="action_student"/>
    </data>
    </openerp>
并将约束放在视图声明中(即.xml文件):

    <record model="ir.ui.view" id="view_student2_form">
        <field name="name">student2.form</field>
        <field name="model">student</field>
        <field name="priority" eval="15"/>
        <field name="type">form</field>
        <field name="arch" type="xml">
        <form string="student">
        <group>
            <field name="first_name" style="width: 40%"/>  
            <field name="name" style="width: 40%"/> 
            <button type="object" string="Form1" name="redirection"/>
        </group>    
        </form>
        </field>
    </record>

    <record model="ir.ui.view" id="view_student_tree">
        <field name="name">student.tree</field>
        <field name="model">student</field>
        <field name="type">tree</field>
        <field name="arch" type="xml">
            <tree string="student">
                <field name="first_name"/>
                <field name="name"/>
                <field name="birth_date"/>
                <field name="address"/>
                <field name="email"/>
                <field name="phone"/>
            </tree>
        </field>
    </record>

    <record model="ir.actions.act_window" id="action_student">
        <field name="name">Student</field>
        <field name="res_model">student</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
    </record>

    <record model="ir.actions.act_window" id="action_student2">
        <field name="name">Student.action2</field>
        <field name="res_model">student</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
        <field name="view_id" ref="view_student_form"/>
    </record>

    <menuitem name="Student/Student" id="menu_student" action="action_student"/>
    <menuitem name="Student" id="menu_student_student_item" parent="menu_student" action="action_student"/>
    </data>
    </openerp>

如果您曾经在.py文件中编码了
required=True
,那么它将在数据库表中设置
Not NULL=Yes

    <record model="ir.ui.view" id="view_student2_form">
        <field name="name">student2.form</field>
        <field name="model">student</field>
        <field name="priority" eval="15"/>
        <field name="type">form</field>
        <field name="arch" type="xml">
        <form string="student">
        <group>
            <field name="first_name" style="width: 40%"/>  
            <field name="name" style="width: 40%"/> 
            <button type="object" string="Form1" name="redirection"/>
        </group>    
        </form>
        </field>
    </record>

    <record model="ir.ui.view" id="view_student_tree">
        <field name="name">student.tree</field>
        <field name="model">student</field>
        <field name="type">tree</field>
        <field name="arch" type="xml">
            <tree string="student">
                <field name="first_name"/>
                <field name="name"/>
                <field name="birth_date"/>
                <field name="address"/>
                <field name="email"/>
                <field name="phone"/>
            </tree>
        </field>
    </record>

    <record model="ir.actions.act_window" id="action_student">
        <field name="name">Student</field>
        <field name="res_model">student</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
    </record>

    <record model="ir.actions.act_window" id="action_student2">
        <field name="name">Student.action2</field>
        <field name="res_model">student</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
        <field name="view_id" ref="view_student_form"/>
    </record>

    <menuitem name="Student/Student" id="menu_student" action="action_student"/>
    <menuitem name="Student" id="menu_student_student_item" parent="menu_student" action="action_student"/>
    </data>
    </openerp>
即使从.py文件中删除了
required=True
,如果您检查表属性,我也不会更改

    <record model="ir.ui.view" id="view_student2_form">
        <field name="name">student2.form</field>
        <field name="model">student</field>
        <field name="priority" eval="15"/>
        <field name="type">form</field>
        <field name="arch" type="xml">
        <form string="student">
        <group>
            <field name="first_name" style="width: 40%"/>  
            <field name="name" style="width: 40%"/> 
            <button type="object" string="Form1" name="redirection"/>
        </group>    
        </form>
        </field>
    </record>

    <record model="ir.ui.view" id="view_student_tree">
        <field name="name">student.tree</field>
        <field name="model">student</field>
        <field name="type">tree</field>
        <field name="arch" type="xml">
            <tree string="student">
                <field name="first_name"/>
                <field name="name"/>
                <field name="birth_date"/>
                <field name="address"/>
                <field name="email"/>
                <field name="phone"/>
            </tree>
        </field>
    </record>

    <record model="ir.actions.act_window" id="action_student">
        <field name="name">Student</field>
        <field name="res_model">student</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
    </record>

    <record model="ir.actions.act_window" id="action_student2">
        <field name="name">Student.action2</field>
        <field name="res_model">student</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
        <field name="view_id" ref="view_student_form"/>
    </record>

    <menuitem name="Student/Student" id="menu_student" action="action_student"/>
    <menuitem name="Student" id="menu_student_student_item" parent="menu_student" action="action_student"/>
    </data>
    </openerp>

解决方案:删除
required=True
后,只需从设置中已安装的模块升级该特定模块。然后,只有您所做的更改才会反映在db中,并且它可以正常工作。

在本模块中,如果我删除必需的属性,一切都可以正常工作,但在更大的模块中,如销售管理,帐户和财务管理如果我在python代码中删除所有这些字段的必需属性,我会得到一个名为AttributeError的错误:“NoneType”对象没有属性“fields\u view\u get”,是的,但您必须通过继承操作该属性,不是吗?否则,这是一个糟糕的做法,因为一旦您更新了Odoo,您将丢失更改。
    <record model="ir.ui.view" id="view_student2_form">
        <field name="name">student2.form</field>
        <field name="model">student</field>
        <field name="priority" eval="15"/>
        <field name="type">form</field>
        <field name="arch" type="xml">
        <form string="student">
        <group>
            <field name="first_name" style="width: 40%"/>  
            <field name="name" style="width: 40%"/> 
            <button type="object" string="Form1" name="redirection"/>
        </group>    
        </form>
        </field>
    </record>

    <record model="ir.ui.view" id="view_student_tree">
        <field name="name">student.tree</field>
        <field name="model">student</field>
        <field name="type">tree</field>
        <field name="arch" type="xml">
            <tree string="student">
                <field name="first_name"/>
                <field name="name"/>
                <field name="birth_date"/>
                <field name="address"/>
                <field name="email"/>
                <field name="phone"/>
            </tree>
        </field>
    </record>

    <record model="ir.actions.act_window" id="action_student">
        <field name="name">Student</field>
        <field name="res_model">student</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
    </record>

    <record model="ir.actions.act_window" id="action_student2">
        <field name="name">Student.action2</field>
        <field name="res_model">student</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
        <field name="view_id" ref="view_student_form"/>
    </record>

    <menuitem name="Student/Student" id="menu_student" action="action_student"/>
    <menuitem name="Student" id="menu_student_student_item" parent="menu_student" action="action_student"/>
    </data>
    </openerp>