odoo开发学习笔记2
一、代码结构内容
1、整个项目最外面的__init__.py文件主要导入models和controllers。
from . import controllers from . import models
2、整个项目最外面的__manifest__.py文件主要导入所有的xxx_view.xml文件。标准化格式如下:
# -*- coding: utf-8 -*- {#模块名 'name': "模块名字", #模块总结 'summary': """模块概述""", #模块注释 'description': """模块注释""", #模块制作人 'author': "姓名", #模块所属公司 'category': '公司', #版本号 'version': '0.1', #依赖的模块,随意添加或者删除可能导致依赖错误 'depends': ['base'], #导入的视图,可以存放多个视图,但是要注意先后顺序,odoo会按顺序读取 'data': [ # 'security/ir.model.access.csv',#权限 'views/views.xml',#导入的视图 ], #导入的测试数据 'demo': [ 'demo/demo.xml', ], #是否是应用 'application':True }
3、models文件夹下也要新建一个__init__.py文件主要导入models内部所有的xxx.py文件。
from . import xxx
二、odoo常用的字段类型及定义
1、Char
它是有长度限制的字符串字段。
username = fields.Char(string=u'姓名')
2、Integer
一般用来记整型数据。
userid = fields.Integer(string=u'用户ID')
3、Boolean
flag = fields.Boolean(string=u'标志')
4、Date
日期格式(精确到年月日)
birthdate = fields.Date(string=u'出生日期', default=fields.Date.today())
5、Datetime
日期格式(精确到年月日时分秒)
birthdate = fields.Datetime(string=u'出生日期', default=fields.Datetime.now)
6、Selection
下拉列表
sex = fields.Selection([(1, u'男'),(2, u'女')], string=u'性别', defaults=1)
7、Many2one
表示多对一关系
Many2one('关联的模型名')
8、One2many
表示一对多关系
注:一对多是虚拟的关系(一对多定义时必须保证有对应的多对一关系存在)
One2many('关联的模型名', '与之对应多对一的字段名')
9、Many2many
表示多对多关系
Many2many('关联的模型名')
三、表单的判断【视图的优先级大于后台】
1、required必填
方法一:视图上校验必填
required='1'
方法二:.py文件中校验必填
required=True
2、readonly只读
方法一:视图上设置只读
readonly='1'
方法二:.py文件中设置只读
readonly=True
3、invisible隐藏
视图上字段隐藏
invisible='1'
4、attrs
组合使用invisible,readonly,required。例:
attrs = {'required': [('属性名', '=', True)]} 意思是当这个属性选中时,这个代码所在位置的属性为必填。
attrs = {'readonly': [('属性名', '=', True)]} 意思是当这个属性选中时,这个代码所在位置的属性为只读。
attrs = {'invisible': [('属性名', '=', True)]} 意思是当这个属性选中时,这个代码所在位置的属性为隐藏。
5、domain过滤
domain表达式类似于三元表达式,对数据进行筛选。
方法一:视图上加过滤
domain = "[('id', '=', 1)]"
方法二:.py文件中加过滤
domain = [('id', '=', 1)]
6、表单widget(小部件)
widget="date"(转换成Date类型)
7、字段related
关联字段特殊用法:提供当前一个字段通过关系调用它在其他对象中的值。
related = "关联字段.关联表中的其他字段"
四、菜单和响应动作
视图动作 <act_window id=" " name=" " res_model=" " view_mode=" "/> 菜单 <menuitem id=" " name=" " parent=" " sequence=" " action=" "/>
注:action必须在菜单之前定义,xml文件是顺序加载的。
五、继承
1、模型继承
odoo提供两种继承机制:
- 在模块内直接修改在其他模块中定义的model。如:添加字段、重写字段定义、添加约束条件、添加函数方法、重写已定义方法。
- 使用代理机制,子模型可以访问父模型的属性,且可以自定义其他属性。
2、视图继承
odoo提供视图继续用于在原有视图上进行扩展,通过inherit_id字段来关联父级视图,在arch元素里通过添加xpath元素来引入父级视图内容。例:
<record id=" " model="ir.ui.view"> <field name="name"> </field> <field name="model">父类的模型名</field> <field name="inherit_id" ref="父类视图id"/> <field name="arch" type="xml"> <xpath expr="//field[@name='description']" position="after"> <field name="子视图中扩展的字段"/> </xpath> </field> </record> 注: expr属性用于指定从父视图中选择使用的元素 position指定该元素的使用: position="inside"表示添加到匹配的元素后 position="replace"表示替换匹配到的元素 position="before"表示添加到匹配的元素前,与其同级 position="after"表示同级添加到匹配到的元素后 position="attributes"用于改变匹配元素的attribute属性
六、数据模型自定义字段
1、实时计算字段
odoo模型不仅可以使用数据库的字段,还可以通过函数实时计算定义字段。在model里self是一个集合,可以使用循环来读取,每一个循环得到的单条记录。
2、默认值字段
userid = fields.Many2one('res.users', default=lambda self: self.env.user) 用来获取系统当前的用户 补充: self.env提供了很多有用的特性: self.env.cr--->当前数据库查询游标 self.env.uid--->当前用户在数据库中的ID self.env.user--->当前用户在数据库中的记录 self.env.context--->当前上下文dictionary
七、模型约束
odoo提供两种方法来校验数据:python程序校验和sql约束。
1、python程序用constrains()方法来校验数据,装饰器方法定义需要校验的字段,校验函数在数据不合法时抛出一个错误。例:
from odoo.exceptions import ValidationError @api.constrains('age') def _check_age(self): for record in self: if record.age < 0: raise ValidationError('年龄不能为负!')
2、sql约束使用的是模型的_sql_constraints属性,里面是一个校验列表,每一个元素有三个子元素,(name, sql_definition, message),name是自定义的约束名称、sql_definition是一个sql表达式、message是校验失败时返回的错误消息。
- Android开发学习笔记:浅谈显示Intent和隐式Intent
- Android开发学习笔记:Intent的简介以及属性的详解
- IPhone 开发笔记第一天——对基础的学习
- 基于.NET的CAD二次开发学习笔记一:CAD开发入门
- ArcGIS客户端开发学习笔记(三)——JSON基础
- IOS开发之MapKit学习笔记
- PHP 开发 APP 接口学习笔记与总结 - [ Linux ] 定时任务
- Activiti工作流开发学习笔记(一)
- Flask-RESTful接口开发学习笔记一:实现简单的GET请求
- 黑马程序员--Java学习笔记之Web开发—JavaScript常用触发事件总结
- 【Unity3D游戏开发学习笔记】(五)灵魂降临—Unity脚本的简单运用
- Hadoop学习笔记1:Hadoop2.7.3分布式部署-Eclipse开发环境部署
- Android开发学习笔记-下拉刷新的实现
- PHP学习笔记【25】--PHP开发之IDE工具zend studio的快捷键一览表
- iPhone开发学习笔记002——Xib设计UITableViewCell然后动态加载
- IPhone 开发笔记WebView 学习
- Kinect开发学习笔记之(七)骨骼数据的提取
- Asp.net控件开发学习笔记(二)-控件开发基础
- Hadoop学习笔记之HBase客户端程序开发
- Android学习开发笔记之SQLite数据库操作