odoo 的一些orm 操作
1.基础文件及目录结构
在认识odoo ORM框架前,先介绍一下odoo中模块目录结构。

data
:存放模块预制数据
i18n
:存放国际化文件
models
:存放模型等py代码
security
:存放权限文件
views
:存放视图文件
__manifest__.py
:该文件用于声明该模块,并指定一些模块元数据。(odoo8时该文件为__openerp__.py
。)
# -*- coding: utf-8 -*-
{
# name:模块名称
'name': " test",
# description:模块描述
'description': """
自定义模块
""",
# author:模块作者(XXX公司或张三)
'author': "Hu",
# website:作者或公司网址
'website': "http://weibo.com/hcw1202",
# category:模块分类
'category': "test",
# version:模块版本
'version': "版本",
# depends:所依赖其他模块
'depends': ["base","stock","sale"],
# 模块安装时加载
'data': [
'security/权限文件.csv',
'data/预制数据.xml',
'views/视图文件.xml',
],
# 创建数据库时勾选Load demonstration data后安装该模块加载演示数据
'demo': [
'data/演示数据.xml',
],
}
2.Model属性
在/models下添加test.py
文件
# -*- coding: utf-8 -*-
from odoo import models, api, fields, _
class Test(models.Model):
# 模型唯一标识(对应数据表为product_manage_product)
_name = 'product_manage.product'
# 数据显示名称,如设置则返回其指定的字段值
_rec_name = 'test_field'
# 字段
test_field = fields.Char(string="字段名称")
model属性详解:
_name
:模型唯一标识,类非继承父类时必须指定。
_rec_name
:数据显示名称,如设置则返回其指定的字段值,不设置默认显示字段为name的字段值,如无name字段则显示"模块名,id";详见BaseModel.name_get
方法。
_log_access
:是否自动增加日志字段(create_uid
, create_date
,write_uid
, write_date
)。默认为True。
_auto
:是否创建数据库对象。默认为True,详见BaseModel._auto_init方法。
_table
:数据库对象名称。缺省时数据库对象名称与_name指定值相同(.
替换为下划线)。
_sequence
:数据库id字段的序列。默认自动创建序列。
_order
:数据显示排序。所指定值为模型字段,按指定字段和方式排序结果集。
例:_order = "create_date desc":根据创建时间降序排列。可指定多个字段。
不指定desc默认升序排列;不指定_order默认id升序排列。
_constraints
:自定义约束条件。模型创建/编辑数据时触发,约束未通过弹出错误提示,拒绝创建/编辑。
格式:
_constraints = [(method, 'error message', [field1, ...]), ...]
method
:检查方法。返回True|False
error message
:不符合检查条件时(method返回False)弹出的错误信息
[field1, ...]
:字段名列表,这些字段的值会出现在error message中。
_sql_constraints
:数据库约束。
例:
_sql_constraints = [ ('number_uniq', 'unique(number, code)', 'error message') ]
会在数据库添加约束:
CONSTRAINT number_uniq UNIQUE(number, code)
_inherit
:单一继承。值为所继承父类_name标识。如子类不定义_name属性,则在父类中增加该子类下的字段或方法,不创建新对象;如子类定义_name属性,则创建新对象,新对象拥有父类所有的字段或方法,父类不受影响。
格式:
_inherit = '父类 _name'
_inherits
:多重继承。子类通过关联字段与父类关联,子类不拥有父类的字段或方法,但是可以直接操作父类的字段或方法。
格式:
_inherits = {'父类 _name': '关联字段'}
3.字段属性
基础类型
Char
:字符型,使用size参数定义字符串长度。
Text
:文本型,无长度限制。
Boolean
:布尔型(True,False)
Interger
:整型
Float
:浮点型,使用digits参数定义整数部分和小数部分位数。如digits=(10,6)
Datetime
:日期时间型
Date
:日期型
Binary
:二进制型
selection
:下拉框字段。
例:
state = fields.Selection([('draft', 'Draft'),('confirm', 'Confirmed'),('cancel', 'Cancelled')], string='Status')
Html
:可设置字体格式、样式,可添加图片、链接等内容。效果如下:

关系类型
One2many
:一对多关系。
定义:
otm = fields.One2many("关联对象 _name", "关联字段",string="字段显示名",...
)
例:analytic_line_ids = fields.One2many('account.analytic.line', 'move_id', string='Analytic lines')"
Many2one
定义:
mto = fields.Many2one("关联对象 _name", string="字段显示名",...
)
可选参数:ondelete,可选值为‘cascade’和‘null’,缺省为null。表示one端删除时many端是否级联删除。
Many2many
定义:
mtm = fields.Many2many("关联对象 _name", "关联表/中间表","关联字段1","关联字段2",string="字段显示名"
,...)
其中,关联字段、关联表/中间表可不填,中间表缺省为:表1_表2_rel
例:partner_id= fields.Many2many("res.partner", string="字段显示名",...)"
复杂类型
参数
readonly
:是否只读,缺省值False。
required
:是否必填,缺省值Falsse。
string
:字段显示名,任意字符串。
default
:字段默认值
domain
:域条件,缺省值[]。在关系型字段中,domain用于过滤关联表中数据。
help
:字段描述,鼠标滑过时提示。
store
:是否存储于数据库。结合compute和related使用。
例:
sale_order = fields.One2many("sale.order", "contract_id",string="销售订单", domain=[('state','=','sale')])
compute
:字段值由函数计算,该字段可不储存于数据库。
例:
amount = fields.Float(string="金额总计", compute=‘_compute_amount’,store=True)
_compute_amount
为计算函数。
related
:字段值引用关联表中某字段。
以下代码表示:
company_id
引用hr.payroll.advice
中company_id
advice_id = fields.Many2one('hr.payroll.advice', string='Bank Advice')
company_id = fields.Many2one('res.company', related='advice_id.company_id', string='Company', store=True)
4.最后
以上即是Model的主要属性,下一节会介绍Model中常用的方法
作者:好大一只粽子
链接:https://www.jianshu.com/p/365696a5b823
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
odoo 的一些orm 操作的更多相关文章
- odoo中的ORM操作
ORM方法简介 OpenERP的关键组件, ORM是一个完整的对象关系映射层,是开发人员不必编写基本的SQL管道. 业务对象被声明继承字models.Models的python类. 这让业务对象在OR ...
- Python/Django(CBV/FBV/ORM操作)
Python/Django(CBV/FBV/ORM操作) CBV:url对应的类(模式) ##====================================CBV操作============ ...
- python/ORM操作详解
一.python/ORM操作详解 ===================增==================== models.UserInfo.objects.create(title='alex ...
- Django中ORM操作
ORM操作: class UserInfo(models.Model): username = models.CharField(max_length=32) password = models.Ch ...
- Django的ORM操作
ORM操作 select * from tb where id > 1 # 对应关系 models.tb.objects.filter(id__gt=1) models.tb.objects.f ...
- python 外键用法 多对多关系 ORM操作 模板相关
一.app/models中写类(设计表结构) 1.普通类 class A(models.Model): id=modles.AutoField(primary_key=True) name=mode ...
- Django之ORM操作
Django之ORM操作 前言 Django框架功能齐全自带数据库操作功能,本文主要介绍Django的ORM框架 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计 ...
- Django之ORM操作(聚合 分组、F Q)
Django之ORM操作(聚合 分组.F Q) 聚合 aggregate()是QuerySet的一个终止子句,也就是说,他返回一个包含一些键值对的字典,在它的后面不可以再进行点(.)操作. 键的名 ...
- python第一百零五天 ---Django 基础 路由系统 URL 模板语言 ORM 操作
一 路由系统 URL 1 url(r'^index/',views.index) url(r'^home/', views.Home.as_view()) 2 url(r'^detail-(\d+). ...
随机推荐
- 原型设计工具Mockplus新年送福利,见者有份
为感谢大家对Mockplus的喜爱与支持,给大家送福利了! 送送送,见者有份! 参与活动,三分钟时间,均可最高获赠专业版1个月使用时间.见者有份! 领福利步骤: 1. 扫码关注微信公众号:Mockpl ...
- c#反射优化 表达式树
using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; us ...
- ant+proguard签名打包 .jar
ant+proguard签名打包 .jar 摘自: https://blog.csdn.net/a_ycmbc/article/details/53432812 2016年12月02日 14:52:3 ...
- Java Persistence with MyBatis 3(中文版) 第二章 引导MyBatis
MyBatis最关键的组成部分是SqlSessionFactory,我们可以从中获取SqlSession,并执行映射的SQL语句.SqlSessionFactory对象可以通过基于XML的配置信息或者 ...
- windows server2012如何开启mysql远程登录
开发的首要任务就是要搭建起自己的服务器,下面主要是我这搭建记录下 我的各种环境 服务器为Windows server2012 安装的MySQL数据的版本是5.6.10 ,64位.当然了版本对于安装没 ...
- 单例模式到Java内存模型
先说单例模式: 经典的单例模式实现: 饿汉式: public class Singleton { private static Singleton instance = new Singleton() ...
- Android-自动完成提示框CompletionTextView
自动完成提示框CompletionTextView可以实现以下效果(提示框从那里出来是系统自动处理的): 类似于在百度输入框,输入一个字符,会自动提示很多和这个相关的条目内容 定义自动完成提示框(此控 ...
- Java == 和 equals 比较
在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String(&qu ...
- mybatis mybatis.xml 文件和properties文件结合来进行配置数据源
- C# javascript 采用 RSA 加密解密
C# javascript 采用 RSA 加密解密 1.C#提供公钥 2.javascript用公钥加密 3.C#用私钥解密 4.javascript 类库 https://www.pidder.de ...