当前位置: 首页 > news >正文

odoo18中模型的常用字段类型

字段的公共属性:
在这里插入图片描述

Char

字符类型,对应数据库中varchar类型,除了通用类型外接收另外两个参数:

size: 字符长度,超出的长度将被截断
trim: 默认True,是否字段值应该被去空白。

Text

文本类型,对应数据库中的text类型,不限长度,没有额外的参数。

Integer

整数类型, 对应数据库中的int4类型

Float

浮点数类型, 兼容数据库中int4, numberic, float8类型.

Float类型可以使用digits属性来指定小数的精度, 例如:

price = fields.Float("价格", digits=(16,3))

digits这里是一个元组,16代表整个数据的长度, 3代表小数的位数. 另外, digits也可以接收一个用来描述系统精度的文本字符串.例如,系统中预置的精度变量名称Discount, 那么,上述定义也可以写成这个样子*:

price = fields.Float("价格", digits="Discount")

Float类型的字段也可以显示为货币类型,方法是在xml中使用monetary小部件:

<field name="amount_undiscounted" string="Subtotal" widget="monetary"/>

Html

Html类型,用于存储一段HTML代码,对应数据库中的text类型,接收下面几个参数:

  • sanitize:是否过滤安全字符(默认True)
  • sanitize_tags: 是否过滤的html标签(只接收白名单列表标签,默认True)
  • sanitize_attributes: 是否过滤的html属性(只接收白名单列表属性,默认True)
  • sanitize_style: 是否过滤style属性(默认False)
  • strip_style: 是否去除style属性中的空白(默认False)
  • strip_classes:是否去除class属性中的空白(默认False)

Date

日期类型,对应于数据库中的date类型,该字段包括如下几个特有方法:

  • today: 当前日期
  • context_today: 返回客户端时区的当前时间
  • to_date: 将时间值转换为date类型的时间
  • to_string: 将时间值转为文本

例如我们想要给某个日期字段设置默认的属性为当天,那么可以像下面这样写:

date_start = fields.Date("开始日期",default=fields.Date.today())

Datetime

时间类型,对应于数据库中的timestamp类型,该字段包括如下几个特有方法:

  • now: 当前时间
  • today: 当前日期
  • context_timestamp: 客户端时区的当前时间戳
  • to_datetime:将时间值转换成datetime类型
  • to_string: 将时间值转成文本

假如我们想要给某个时间字段设置默认当前时间,那么可以像下面这样写:

date_start = fields.Datetime("开始时间",default=fields.Datetime.now())

Binary

二进制文件类型,接收三个参数:

  • prefetch: 默认False
  • context_dependent:默认True
  • attachment:默认True,是否作为附件存储

二进制文件作为附件存储时存在服务器指定的文件夹路径中,否则存在数据库中,对应的数据库类型为bytea.

图片类型的字段在odoo中亦是使用Binary字段存储的,只不过视图渲染时使用了image部件。

二进制字段通常以base64编码的形式存储在数据库中,因此在展示时,需要将base64进行解码输出。另外,二进制文件在form表单中只读状态下表现为下载按钮,但不包含原始的文件名。如果想要显示文件名,需要使用另外一字段将文件名存储起来。可参考如下代码:

<field name="xls" filename="xls_name"/>
<field name="xls_name" invisible="1"/>

Selection

下拉选择类型,多选一类型,不同于Many2one类型,Selection类型在数据库中对应的类型是int4或varchar类型。

除了通用的属性,另外接收2个参数:

  • selection: 可选的范围值,值和名称组成的元组列表。
  • validate: 默认True,是否写入时校验。
  • Selection包含如下的属性或方法:

Monetary

odoo中对于货币类型的数值单独做了一个字段用来处理,这个字段就是Monetary。Monetary的基本使用方法同Float类型一致,不同的是Monetary的值会更精确,同时Monetary的值还依赖于当前计算环境的币种。

默认情况下要使用Monetary字段,需要在当前模型中同时新增一个currency_id的Many2one的字段,该字段表明本模型使用的货币类型(res.currency)。

例如:

currency_id = fields.Monetary("res.currency","货币")
amount = fields.Monetary("小计")

在视图中,如果需要带上货币符号,我们可以使用monetary小部件:

<field name="amount_total" widget="monetary" options="{'currency_field': 'currency_id'}"/>

如果不想使用默认的currency_id字段,可以在options中传入指定的货币类型字段名。

Many2one

多对一类型,对应于数据库中的类型是int4,相当于数据库主表中的外键。可选的参数如下:

  • comodel_name: 被关联的对象
  • domain: 过滤条件
  • context: 上下文
  • ondelete: 删除时的选项,可选set null(本字段设置null),restrict(严格控制,只有先删除本字段才允许删除)和cascade(级联删除本字段关联的所有记录)。
  • auto_join: 当字段被搜索时是否自动聚合,默认为False
  • delegate: 当设置为True时,关联对象的所有字段将在本字段变得可用。

One2many

一对多类型,返回值是一个关联对象的集合。接收的参数列表如下:

  • comodel_name: 关联对象名称
  • inverse_name: 在Many2one对象中的字段名 默认为None
  • domain: 过滤条件
  • context: 上下文
  • auto_join: 当字段被搜索时是否自动聚合,默认为False
  • limit: 读取的条数限制
  • copy: 是否允许拷贝(默认False)

在这里插入图片描述

Many2many

多对多关系类型的字段,Many2many的命令字与One2many相同,与One2many类型不同的是, One2many要对关联对象有一个回溯本身对象的inverse_name字段,而Many2many字段并无此限制。

Many2many字段的主要属性参数如下:

  • comodel_name:关联对象名
  • relation:关系表名
  • column1:本对象的关联字段名
  • column2:关联对象的关联字段名
  • domain: 过滤条件
  • context: 上下文
  • limit: 读取条数限制

相关文章:

odoo18中模型的常用字段类型

字段的公共属性: Char 字符类型&#xff0c;对应数据库中varchar类型&#xff0c;除了通用类型外接收另外两个参数&#xff1a; size: 字符长度&#xff0c;超出的长度将被截断 trim: 默认True&#xff0c;是否字段值应该被去空白。 Text 文本类型&#xff0c;对应数据库…...

【如何用更少的数据作出更好的决策】-gpt生成

如何用更少的数据作出更好的决策 用更少的数据作出更好的决策是一种能力的体现&#xff0c;需要结合有效的方法、严谨的逻辑以及对问题的深刻理解。以下是一些可以帮助你实现这一目标的策略&#xff1a; 明确目标 在收集和分析数据之前&#xff0c;先明确你的决策目标是什么…...

ara::com 与 AUTOSAR 元模型的关系总结

原文链接&#xff1a;AUTOSAR_EXP_ARAComAPI的7章笔记&#xff08;6&#xff09; 整体说明 先是表明此前解释 ara::com API 思想和机制时未涉及具体 AP 元模型清单部分&#xff0c;本章旨在阐明 ara::com 与相关元模型部分的关系&#xff0c;且是较高层次的基本理解性介绍&am…...

springboot整合hive

springboot整合hive pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.…...

浅谈 proxy

应用场景 Vue2采用的defineProperty去实现数据绑定&#xff0c;Vue3则改为Proxy&#xff0c;遇到了什么问题&#xff1f; - 在Vue2中不能检测数组和对象的变化 1. 无法检测 对象property 的添加或移除 var vm new Vue({data:{a:1} })// vm.a 是响应式的vm.b 2 // vm.b 是…...

Ansys Maxwell:SheetScan - 导入材料特性曲线

你好&#xff0c; 在这篇博文中&#xff0c;我展示了如何使用 Ansys Maxwell“SheetScan”工具导入材料特性数据集。在这篇博文中&#xff0c;我展示了如何导入复杂磁导率实部数据集以用于涡流&#xff08;频率相关&#xff09;求解器&#xff0c;并以 Ferroxcube 磁芯材料规格…...

解决 Android 单元测试 No tests found for given includes:

问题 报错&#xff1a; Execution failed for task :testDebugUnitTest. > No tests found for given includes: 解决方案 1、一开始以为是没有给测试类加public修饰 2、然后替换 Test 注解的包可以解决&#xff0c;将 org.junit.jupiter.api.Test 修改为 org.junit.Tes…...

人工智能的核心思想-神经网络

神经网络原理 引言 在理解ChatGPT之前&#xff0c;我们需要从神经网络开始&#xff0c;了解最简单的“鹦鹉学舌”是如何实现的。神经网络是人工智能领域的基础&#xff0c;它模仿了人脑神经元的结构和功能&#xff0c;通过学习和训练来解决复杂的任务。本文将详细介绍神经网络…...

JAVA中的Lamda表达式

JAVA中的Lamda表达式 Lambda 表达式的语法使用场景示例代码1.代替匿名内部类2. 带参数的 Lambda 表达式3. 与集合框架结合使用4. 使用 Stream 操作 总结 Java 的 Lambda 表达式是 Java 8 引入的一个新特性&#xff0c;用于简化代码&#xff0c;特别是在处理函数式编程时。Lambd…...

锂电池学习笔记(一) 初识锂电池

前言 锂电池近几年一直都是很热门的产品&#xff0c;充放电管理更是学问蛮多&#xff0c;工作生活中难免会碰到&#xff0c;所以说学习锂电池是工程师的必备知识储备&#xff0c;今天学习锂电池的基本知识&#xff0c;分类&#xff0c;优缺点&#xff0c;循序渐进 学习参考 【…...

深度学习2

四、tensor常见操作 1、元素值 1.1、获取元素值 tensor.item() 返回tensor的元素&#xff1b;只能在一个元素值使用&#xff0c;多个报错&#xff0c;当存在多个元素值时需要使用索引进行获取到一个元素值时在使用 item。 1.2、元素值运算 tensor对元素值的运算&#xff1a;…...

第六节-AppScan扫描报告

第六节-AppScan扫描报告 1.加载扫描结果 1.点击【打开】 2.选择之前保存过的扫描结果 3.等待加载完成 2.领导查看的报告 1.点击【报告】 2.模板选择为【缺省值】 3.最低严重性选择为【中】&#xff0c;测试类型选择为【应用程序】 4.点击【布局】 5.选择【其他徽标】&#x…...

【c++丨STL】stack和queue的使用及模拟实现

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C、STL 目录 前言 一、什么是容器适配器 二、stack的使用及模拟实现 1. stack的使用 empty size top push和pop swap 2. stack的模拟实现 三、queue的…...

基于SpringBoot的在线教育系统【附源码】

基于SpringBoot的在线教育系统 效果如下&#xff1a; 系统登录页面 系统管理员主页面 课程管理页面 课程分类管理页面 用户主页面 系统主页面 研究背景 随着互联网技术的飞速发展&#xff0c;线上教育已成为现代教育的重要组成部分。在线教育系统以其灵活的学习时间和地点&a…...

Kafka-副本分配策略

一、上下文 《Kafka-创建topic源码》我们大致分析了topic创建的流程&#xff0c;为了保持它的完整性和清晰度。细节并没有展开分析。下面我们就来分析下副本的分配策略以及副本中的leader角色的确定逻辑。当有了副本分配策略&#xff0c;才会得到分区对应的broker&#xff0c;…...

市场波动不断,如何自我提高交易心理韧性?

交易市场&#xff0c;一个由无数变量交织而成的复杂领域&#xff0c;常常因各方因素的微妙变化而掀起波澜。在这里&#xff0c;机遇与挑战并存&#xff0c;诱人的利润与潜在的风险如影随形&#xff0c;共同考验着每一位交易员的智慧与心理承受能力。在这样的环境下&#xff0c;…...

加速科技精彩亮相中国国际半导体博览会IC China 2024

11月18日—20日&#xff0c;第二十一届中国国际半导体博览会&#xff08;IC China 2024&#xff09;在北京国家会议中心顺利举办&#xff0c;加速科技携重磅产品及全系测试解决方案精彩亮相&#xff0c;加速科技创始人兼董事长邬刚受邀在先进封装创新发展论坛与半导体产业前沿与…...

利用c语言详细介绍下选择排序

选择排序&#xff08;Selection sort&#xff09;是一种简单直观的排序算法。它是每次选出最小或者最大的元素放在开头或者结尾位置&#xff08;采用升序的方式&#xff09;&#xff0c;最终完成列表排序的算法。 一、图文介绍 我们还是使用数组【10&#xff0c;5&#xff0c;3…...

华为流程L1-L6业务流程深度细化到可执行

该文档主要介绍了华为业务流程的深度细化及相关内容,包括流程框架、建模方法、流程模块描述、流程图建模等,旨在帮助企业构建有效的流程体系,实现战略目标。具体内容如下: 华为业务流程的深度细化 流程层级:华为业务流程分为 L1 - L6 六个层级,L1 为流程大类,L2 为流程…...

bridge-multicast-igmpsnooping

# 1.topo # 2.创建命名空间 ip netns add ns0 ip netns add ns1 ip netns add ns2 ip netns add ns3 # 3.创建veth设备 ip link add ns0-veth0 type veth peer name hn0-veth0 ip link add ns1-veth0 type veth peer name hn1-veth0 ip link add ns2-veth0 type veth pe…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径&#xff0c;但是vite中默认不可以。 如何实现&#xff1a; vite中提供了resolve.alias&#xff1a;通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...