6、odoo中的模型与ORM(Object-Relational Mapping)
1、ODOO连接数据库
1)数据库连接代码
from odoo import models class MinimalModel(models.Model): _name = 'test.model'
在C:\odoo-10.0\myaddons\openacademy\models\models.py文件中,输入以上代码,则安装此模块后,会在数据库中自动创建test_model数据库表
如下是利用CMD命令自动生成的代码:
下面代码一定注意: 类名一定要与_name后面的名字相同
class openacademy
_name = 'openacademy.test
class openacademy(models.Model): _name = 'openacademy.openacademy' #数据库名为openacademy-openacademy name = fields.Char() #数据库字段为name,类型为char类型
2)字段与字段属性
name = fields.Char()
required=True 必填
name = field.Char(required=True)
string 界面label的值
help 界面tooltip
index 是否创建数据库索引
注意:如果新添加一个字段,字段的required设置为True,原来的数据库表中已经有数据了,那么新添加的字段前台是必填的,数据库中的字段为非必填,因为数据库中已经有空数据了。
如果是把数据库中的表删除,那么新增的表前台和数据库表都是必填。
3)数据库简单字段类型
Boolean, Date, Char 不可再分 保存单一数据
4)数据库保留字段
id
create_date
create_uid
write_date
write_uid
可以通过一些设置不显示 _log_access = False
5)特殊字段
name 用来显示这条记录 (比如在many2one下拉列表中)
可以通过_rec_name =”” 指定其他字段
from openerp import models, fields, api
class Course(models.Model):
_name = ‘openacademy.course’
name = fields.Char(string="Title", required=True)
description = fields.Text()
注意
在模块里新建模型需要重启服务器后进行更新,才会在db里创建数据表
_name命名一般以模块的包名(目录名)+ . + 表的名称,避免名称重复在所有模块里重复。
class的命名一般字母大写, 名称避免在本python模块里重复(不要在一个文件中定义多个同名class,否则只有最后一个class生效)
补充
在odoo中,可以不用orm访问数据库,直接写sql语句也是可以的,但是不会触发一些权限的操作。
在models.py 中删除class,更新后需要手动删除数据表
6、查看创建的模型(数据库表及界面显示字段)
设置———》数据结构——》模型
浙公网安备 33010602011771号