odoo笔记

news2024/12/22 18:06:46

后台运行项目

nohup python odoo-bin -c ./debian/odoo.conf &

查看当前odoo进程 (更新项目模型类时,1.先重启项目,2.再去网页更新模块)

ps -fA | grep odoo
kill 进程id

删库

/web/database/manager 

查找文件夹

find /path/to/search -type d -name "static"     
​
find / -type d -name "static"       # 所有路径下查找
​

pgAdmin

重启数据库

sudo systemctl restart postgresql

Nginx

Nginx 服务的状态
sudo systemctl status nginx.service
​
Nginx 服务启动失败的信息
journalctl -xe
​
​

在线上my_odoo模块中提交代码更新

cd /home/odoo/odoo16/my_odoo
git pull
623178111@qq.com
zhangxiao999.

su jz

  1. 解压缩odoo16 源码

  2. 根目录有一个odoo-bin 是启动文件

  3. 创建虚拟环境,并安装所需的包 根目录自带requirements.txt

  4. pip install -r requirements.txt -i Simple Index

  5. 根目录创建自己的自定义模块 my_odoo

  6. 根目录下 debian/odoo.conf

    [options]
    ; This is the password that allows database operations:
    ; admin_passwd = admin
    db_host = 127.0.0.1
    db_port = 5432
    db_name = odoo_one
    db_user = zx
    db_password = 123456
    default_productivity_apps = True
    addons_path = E:\odoo\odoo16\addons,E:\odoo\odoo16\my_odoo
  7. 初次运行加初始化 -i base,注释 addons_path

    python odoo-bin -c ./debian/odoo.conf -i base

  8. 配置Debug模式

  9. my_odoo/下创建一个模块:

    python odoo-bin scaffold 模块名 路径/

    可以放开注释了,debian/odoo.conf中 addons_path

odoo模型类

    _sql_constraints = [
        ('声明', 'unique(train_batch_number,student_id)', '说明!')
    ]

class fixassets_type(models.Model):
    _name = 'accountant.assets_type'    # 模块名.模型类名
    _description = '固定资产分类'     # 模型的非正式名称,当用户界面显示
_ = fields.Datetime(string='记账日期')
​
_ = fields.Float(string='税额', digits=(10, 2))
​
_ = fields.Integer(string='固定资产科目', required=True)
​
_ = fields.Char(string='固定资产科目路径', required=True)
​
_ = fields.Date(string='到货日期')
​
_ = fields.Json(string='关联附件')
​
_ = fields.Boolean(string='是否启用')
​
_ = fields.Selection([
        ('deitable', '可编辑'), ('under_review', '审核中'), ('withdrawn', '撤回中'),
        ('approved', '已审核'), ('cancelled', '已作废')
    ], string='单据状态')
    
_ = fields.Selection([('固定成本', '固定成本'), ('先进先出', '先进先出'), ('加权平均', '加权平均')], string='成本计算方式')
​
取值方式 ->>>
        for i in cls:
            dic = {
                'id': i.id,
                'name': i.id,
                'test1': dict(cls._fields['test1'].selection).get(i.test1),
            }
​
​
# 多对一关系绑定对方模型类的 _name=''
_ = fields.Many2one('accountant.assets_type', string='固定资产分类编号', ondelete='cascade', required=True)
​
ondelete='cascade' 父级删除,子集跟着删除 及连操作
ondelete='restrict' 子级在 父级不可删除
Char    单行文本
Text    多行文本
Selection   下拉单选
Htmlhtml    富文本
Integer 整型
Float   浮点型
Monetary    货币型
Date    日期型
Datetime    日期+时间型
Boolean 布尔型
Binary  二进制文件类型
Many2one    多对一
One2many    一对多
Many2many   多对多
​
string  字段名称(str)
default 默认值
help    帮助提示内容(str)
readonly    是否为只读(boolean)
required    是否为必填(boolean)
unique      唯一(boolean)
index   是否为索引字段(boolean)
copy    是否为允许复制(boolean)
related 关联字段, 表示本字段引用关联表中的某字段。
groups  定义可操作的用户组(str)
domain  用于关联字段记录的过滤
store   是否存入数据库 默认为True
compute 用于创建一个默认记录给指定字段,不可编辑,store默认为False
inverse 操作compute的默认记录,反向操作给depends绑定的字段,且compute操作后的记录还是操作前的记录
related 关联字段, 表示本字段引用关联表中的某字段
groups  用户组,定义可操作的用户组(str)
ondelete    set null: 当b中删除记录时,modelA中相关记录的a=null ; ; ; cascade: 当b中删除记录时,modelA中相关记录也全部删除 ; ; ;restrict: 当b中删除记录时,如果modelA中存在对应记录,则无法操作 b 的删除;;;;;;;;;;;;;;;;;;;;;\;;;;;; ; 如果Many2one字段中没有设置ondelete属性,则默认为set null
​

odoo视图类

从请求中提取JSON数据

data = request.get_json_data()

GET传参

@http.route('/api/book/<int:book_id>', auth='none', type='http', methods=['GET'], csrf=False)
def create_book(self,book_id):
​
params=request.params
params.get('name')
​
kw.get('name')

POST传参

try:
    data = request.get_json_data()
except Exception as e:
    return api_response(error=ERRORS.JSON_DATA_CHECK)
    
data.get('name')

json传参

{"data":
    [
        [1,"rdtfvby"],  
        [1,"rdtfvby"],
        [1,"rdtfvby"],
        [1,"rdtfvby"],
    ]
}
​
@http.route('/api/questionnaireresults', auth='none', type='json', methods=['POST'], csrf=False)
    def get_questionnaireresults(self, **kw):
        event = json.loads(request.httprequest.data)
        print(event, '???????????')
        for i in event.get('data'):
            a = i[0]
            b = i[1]
            print(a, '--->', b)
​
​
{'data': [[1, 'rdtfvby'], [1, 'rdtfvby'], [1, 'rdtfvby'], [1, 'rdtfvby']]} ???????????
1 ---> rdtfvby
1 ---> rdtfvby
1 ---> rdtfvby
1 ---> rdtfvby

指定模型类

model = request.env['模型类名字']

search() search_read() search_count()

request.env['模型类名字'].sudo().search()
​
>>>> search([(条件1),(条件2)],['限制只查询的字段'], order='id desc', offset=0, limit=1) 返回对象
取值用for循环 i.字段名
​
>>>> search_read() 返回数据
取值用for循环 i.get('字段名')
​
>>>> search_count()
返回数据的总条数
​
>>>> 模糊查询
info_like = model_book.sudo().search_read([('name','ilike','周')])
​
>>>> 
examstudent_model.sudo().search([], order=['id desc'])

获取表中字段名

fields_list = list(request.env['course.coursekind'].fields_get().keys())

新建 :

>> 检查数据格式/验证数据
​
>> 父级存在才能创建
父表.sudo().search([('id', '=', 子parent_id)])
​
>> 
model.sudo().create(data)

删除:

>> 判断对象是否存在
​
>> 有子级不可删除
子表.sudo().search([('子外键', '=', 父id:要删除的id)])
​
>>
info_one.unlink()

修改:

>> 判断对象是否存在
​
>> 检查数据格式/验证数据
​
kind.write(data)

详情:

>> search_read()查询数据
​
>> 存在就返回数据

全部列表页:

model = request.env['course.coursekind']
params = request.params
domain, size, page = all_fields_Filter(model, params)
data = request.env['course.coursekind'].sudo().search_read(domain, limit=size, offset=page)
count = request.env['course.coursekind'].sudo().search_count(domain)
return api_response(data=data, count=count)

自关联树形图:

model = request.env['course.coursekind']
params = request.params
fields = ['id', 'name', 'parent_id']
data, count = TreeData().tree_list(model, params, fields)
return api_response(data=data, count=count)

时间

# 获取上海时区
shanghai_tz = pytz.timezone('Asia/Shanghai')
# 获取当前时间
datetime_now = datetime.datetime.now(shanghai_tz)
# 移除时区
datetime_now = datetime_now.replace(tzinfo=None)
# datetima 转分钟数
exam_time_end = examstu.ent_exam - datetime_now
exam_time_end = int(exam_time_end.total_seconds() / 60)

apiPOST设置

在登录接口的后执行脚本中添加设置
apt.globals.set("token", response.json.data.token);

odoo数据库配置

odoo数据库配置文件
/home/odoo/odoo16/debian/odoo.conf

初始化数据库
./odoo-bin -c /home/odoo/odoo16/debian/odoo.conf -d 数据库名 --addons-path=/home/odoo/odoo16/addons -u base --without-demo=ALL --init=base
​
重置密码
./odoo-bin -c /home/odoo/odoo16/debian/odoo.conf -d odoo -u base --stop-after-init --init=admin_password:123456
​
​

postgresql数据库

启动服务 net start postgresql

超级用户:postgres 123456 普通用户:zx 123456

连接数据库 psql -U postgres 登录数据库 psql -h IP -p 端口 -U 用户名 -d 数据库名 -W

\? 所有命令帮助 \l 列出所有数据库 \d 列出数据库中所有表 \dt 列出数据库中所有表 \d [table_name] 显示指定表的结构 \di 列出数据库中所有 index \dv 列出数据库中所有 view \h sql命令帮助 \q 退出连接 \c [database_name] 切换到指定的数据库 \c 显示当前数据库名称和用户 \conninfo 显示客户端的连接信息 \du 显示所有用户 \dn 显示数据库中的schema \encoding 显示字符集 select version(); 显示版本信息 \i testdb.sql 执行sql文件 \x 扩展展示结果信息,相当于MySQL的\G \o /tmp/test.txt 将下一条sql执行结果导入文件中

修改密码 alter user 用户名 with password '需要修改的密码';

展示所有库名 select datname from pg_database;

创库 create database 数据库名 owner 所属用户 encoding UTF8;

删库 drop database 数据库名;

根据已有表结构创建表:

create table if not exists 新表 (like 旧表 including indexes including comments including defaults);

删除表:

drop table if exists "t_template" cascade;

新建用户并设置密码 createuser 用户名 with password '123456';

设置只读权限 alter user 用户名 set default_transaction_read_only = on;

设置可操作的数据库 grant all on database 数据库名 to 用户名;

授权可操作的模式和权限 -- 授权 grant select on all tables in schema public to 用户名; -- 授权 GRANT ALL ON TABLE public.user TO mydata; GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE public.user TO mydata_dml; GRANT SELECT ON TABLE public.user TO mydata_qry;

索引: drop index if exists t_user_username; create index t_user_username on t_user (username);

创建唯一索引:

drop index if exists t_user_username; create index t_user_username on t_user (username);

查看索引:

\d t_user

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1099027.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux centos7 环境下 no such file or directory

目录 1.问题描述2.主要原因2.1修改后代码2.2修改前代码 总结参考 1.问题描述 预览excel文件时无法找到对应的html文件 2.主要原因 异常原因&#xff1a;代码获取的是系统的tmp文件&#xff0c;但是linux环境环境中心tmp目录是没有权限的&#xff0c;所以不能获取系统的根目录…

Python如何获取动态加载的数据呢 ?

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 例子1&#xff1a;爬取dy电影中的电影详情数据 url:https://movie.douban.com/ 1.什么是动态加载的数据&#xff1a; 我们通过requests模块进行数据爬取无法每次都是可见…

vue使用高德地图轨迹活动效果demo(整理)

在html页面引入您自己的key <script language"javascript" src"https://webapi.amap.com/maps?v1.4.15&key6b26c2c58770d13a4ecf2b96615dbaee"></script><template><div class"index"><div id"amapContain…

什么是粘包和半包问题

什么是粘包和半包问题 粘包 发送的是 ABC和DEF 接收到的是 ABCDEF 半包 发送的是 ABCD 接收到的是 AB 和 CD 为什么会有粘包问题? 因为 TCP 是面向连接的传输协议&#xff0c;它是以“流”的形式传输数据的&#xff0c;而“流”数据是没有明确的开始和结尾边界的&#xff0…

MIT6.5830 Lab1-Go tutorial实验记录(一

MIT6.5830 Lab1-Go tutorial实验记录&#xff08;一&#xff09; – WhiteNights Site 标签&#xff1a;Golang, 数据库 编写一个简单的http server。 前言 MIT数据库系统实验 在网上看到了这么个实验&#xff0c;刚好对golang和数据库比较感兴趣&#xff0c;于是开始跟着做实…

五大亮点探索互联网医院源码的创新应用方式

作为互联网医疗行业的专家&#xff0c;我将为您揭示互联网医院源码的五大创新亮点。随着数字化技术的迅猛发展&#xff0c;互联网医院源码成为了提升医疗服务质量和提供便捷就医体验的重要工具。现在&#xff0c;让我们一起深入探索这五大亮点&#xff0c;了解互联网医院源码在…

什么是人事RPA?人事RPA解决什么问题?人事RPA实施难点在哪里?

每家公司人力资源部门每天需要筛选适合自己公司岗位要求的人才并与之沟通邀约面试、每月全公司员工的考勤状态核对、业绩考核核对、入离职手续办理、新员工培训等等&#xff0c;每项业务流程都由人手操作&#xff0c;效率极低、流程繁琐、费时费力。HR部门每天面对的业务数据量…

基于Java的驾校教练预约管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

使用Linux远程连接OpenGauss数据库的步骤和方法

文章目录 前言1. Linux 安装 openGauss2. Linux 安装cpolar3. 创建openGauss主节点端口号公网地址4. 远程连接openGauss5. 固定连接TCP公网地址6. 固定地址连接测试 前言 openGauss是一款开源关系型数据库管理系统&#xff0c;采用木兰宽松许可证v2发行。openGauss内核深度融合…

COMMUTING CONDITIONAL GANS FOR MULTI-MODAL FUSION

方法 C f ^f f是分类器&#xff0c;P f ^f f(o i _i i​)是第i个物体出现的融合概率 作者未公布代码

Sectigo数字证书

安装SSL证书可以提供数据保护、确保身份真实性&#xff0c;并增强用户信任&#xff0c;从而提高网站的安全性和可信度。所以越来越多注重网络安全的技术人员在保障数据安全的手段上&#xff0c;选择直接安装SSL证书。 其中Sectigo的SSL证书是全球SSL证书市场占有率最高的CA公司…

电脑打开图片比例太大怎么调?这个方法又快又好用

别人给我们发送的图片&#xff0c;有许多打开之后提示图片太大&#xff0c;这种情况改怎么处理呢&#xff1f;其实可以使用图片改大小&#xff08;https://www.yasuotu.com/size&#xff09;功能来对图片尺寸大小修改就可以了&#xff0c;接下来就分享一个批量修改图片尺寸的方…

牛奶配送经营商城小程序的作用是什么

牛奶是老少皆爱喝的饮品&#xff0c;市场呈现大品牌多区域拓展形式&#xff0c;中小企业在经营中较为受限制&#xff0c;传统线下超市铺货占领的方式已经变得很低效&#xff0c;线下直营店和经销商在实际经营中面临难题。 线下经营受困&#xff0c;线上经营成为众商家扩大生意…

01_CookieWebStorage

1 Cookie Cookie的使用必须基于web服务器&#xff0c;因为Cookie的操作会跟随http请求进行。 Cookie&#xff0c;有时也用其复数形式 Cookies。类型为“小型文本文件”&#xff0c;是某些网站为了辨别用户身份&#xff0c;进行Session跟踪而储存在用户本地终端上的数据&#x…

水生物数据集

FishNet: A Large-scale Dataset and Benchmark for Fish Recognition, Detection, and Functional Traits Prediction FishNet 是一个大规模多样化的数据集&#xff0c;包含了来自 17357 种水生物的 94532 张精心整理的图像。这些图像根据水生物的生物分类学&#xff08;目、科…

数据挖掘之贝叶斯优化——前反馈特征的参数,估计特征的最佳数值

贝叶斯优化是一个全局优化方法&#xff0c;用于优化具有噪声的黑盒函数。这一方法在许多现实世界的问题中都有应用&#xff0c;特别是在那些评估目标函数的代价很高的场合&#xff0c;例如超参数调优。 背景&#xff1a; 为什么需要贝叶斯优化&#xff1f; 在数据挖掘、机器…

VBA窗体跟随活动单元格【简易版】

本篇博客与以往的风格不同&#xff0c;先上图再讲解。 这个效果是不是很酷&#xff0c;VBA窗体&#xff08;即UserForm&#xff0c;下文中简称为窗体&#xff09;可以实现很多功能&#xff0c;例如&#xff1a;用户输入数据&#xff0c;提供选项等等。如本博客标题标注&#…

分享一下微信小程序怎么实现积分商城功能

微信小程序是一种便捷、高效的应用程序&#xff0c;它可以帮助企业或商家快速搭建自己的线上平台&#xff0c;提供更好的服务和产品给用户。积分商城是小程序中一种常见的功能&#xff0c;它可以帮助企业或商家吸引和留住用户&#xff0c;提高用户的忠诚度和互动性。下面就以微…

苹果 Vision Pro 头显新专利:增加重量减轻颈部压力

上周&#xff0c;彭博社的古尔曼表示 Vision Pro 头显过重&#xff0c;导致开发者佩戴后出现明显的颈部疲劳。随后&#xff0c;便有人发现在美国商标和专利局&#xff08;USPTO&#xff09;公示的清单中&#xff0c;苹果公司又获得了一项Vision Pro的专利&#xff0c;该专利提…

【Linux学习笔记】下载工具yum

1. yum工具1.1. yum的安装1.2. yum的搜索1.3. yum的卸载 2. Linux和Windows互相传输文件2.1. rz命令2.2. sz命令 3. yum的下载源 1. yum工具 yum是Linux软件包的管理器&#xff0c;是一个软件。那么软件的本质是什么呢&#xff1f; 答案是指令&#xff01; 下面举几个简单的例…