odoo学习笔记(模型)数据库设置
简介:
数据库设置这个就没什么可说的,你没数据库,准备玩什么?
一:数据模型定义文件
根据上一篇笔记,数据库模型的配置是在新模块的models/models.py文件。
二:示例文件的解读
1 # -*- coding: utf-8 -*- 2 3 from odoo import models, fields, api 4 5 6 class crud(models.Model): 7 _name = 'crud.crud' 8 _description = 'crud.crud' 9 10 name = fields.Char() 11 value = fields.Integer() 12 value2 = fields.Float(compute="_value_pc", store=True) 13 description = fields.Text() 14 15 @api.depends('value') 16 def _value_pc(self): 17 for record in self: 18 record.value2 = float(record.value) / 100
第一行:utf-8编码,没啥解释的
第三行:导入models,fields,api
第六行:定义一个模型(可以理解为一个表)名字是crud,继承models.Model
第七行:_name定义了应用模块在odoo系统中的名字
第八行:_description,应用模块的描述
10-13:定义了一些字段
十五行:定义了一个计算函数,来定义value2,和store配合使用,
三:扩展模型,增加自己的字段
odoo有如下字段类型
class Boolean(Field) #布尔 class Integer(Field) #整型 class Float(Field) #浮点 class Monetary(Field) #货币? class Char(Field) #文本 class Text(Field) #多行文本 class Html(Field) #html富文本 class Date(Field) #日期 class Datetime(Field) #时间 class Binary(Field) #二进制 class Image(Binary) #图片基于二进制 class Selection(Field) #选择 class Reference(Selection) #基于选择 class Many2one #关系多对一 class One2many #关系一对多 class Many2many #关系多对多
四:保留字段
odoo会自动创建如下字段方便管理。
id 表主键 整型
create_date 创建时间 时间
create_uid 创建用户 多对一
write_date 最后修改时间 时间
write_uid 最后修改用户 多对一
还有自动处理会使用的保留字段
active 记录可见性 布尔
name 记录名 字符串
记录可见性,这个可以设置为False,即不显示该记录,不知道是哪里用的,就是提醒你不要使用这个名字来命名你的字段。
name,在打开某条记录后,显示的记录名字,如果不设,打开后你就不知道是哪条记录了。
五:字段属性:
属性名 | 值类型 | 默认值 | 说明 |
string | 字符串 | 字段名 | 视图中显示的字段标签 |
required | 布尔 | False | 是否可以为空 |
help | 字符串 | 空 | 视图中显示的字段帮助信息 |
index | 布尔 | False | 是否建立索引 |
default:设置默认值
gender = fields.Selection( [("1", "男性"), ("2", "女性"), ("3", "人妖")], string="性别", default="1" )
active = fields.Boolean(string="信息是否有效", default=True)
compute:计算属性
bmi是根据体重/身高*身高计算的。
class personal(models.Model): _name = 'crud.personal' _description = 'personal_info' name = fields.Char(string='姓名') height = fields.Float(string='身高(m)', help='以米为单位') weight = fields.Float(string='体重(kg)', help='以公斤为单位') bmi = fields.Float(compute='_count_bmi', store=True) @api.depends('height', 'weight') def _count_bmi(self): for record in self: record.bmi = float(record.weight) / (record.height * record.height)
先写到这里吧。
作者:上官飞鸿
出处:https://www.cnblogs.com/jackadam/p/14579797.html
版权:本作品采用「知识共享-署名-非商业性-禁止演绎(CC-BY-NC-ND)」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现