odoo安装到开发

 

windows环境配置

  1. 安装开发工具PyCharm

  2. 安装Python

  3. 安装PostgreSQL数据库管理工具

  4. 下载并配置odoo

odoo13代码:https://github.com/odoo/odoo/archive/13.0.zip
  1. 创建oddo.conf
  2. [options]
    addons_path = D:\software\ODOO\odoo-win-14\odoo14-bygitzip\addons
    data_dir = odoofile
    db_host = 192.168.109.130
    db_maxconn = 64
    db_name = odoo
    db_user = root
    db_password = root
    db_port = 5432
    loglevel = debug
    db_template = template0
    
    longpolling_port = 8072
    xmlrpc_port = 8013

    **python可以是虚拟环境也可以是主环境可能会影响到其他使用Pyhton的程序,比如你的Django工程**。将代码通过pychram打开 打开FileSettings选择ProjectInterpreter --showAll--add--新虚拟环境就会存在一个venv的文件夹

  3. 启动虚拟环境

    cd odoo14-bygitzip/venv/Scripts
    ./Activate.ps1  #powershell
    activate.bat #cmd

    虚拟环境中安装依赖

    cd odoo14-bygitzip
    pip install -r odoo/requirements.txt
    
    #此步骤也可在pychram中  在启动虚拟环境后  可以在开发工具中打开终端Terminal 可以直接到venv操作命令,执行上述命令即可

     

  4. 也可参考详细(14条消息) ODOO13(二)Windows开发环境搭建_zjmy的博客-CSDN博客

  5. Odoo12版本怎么配置启动? | Odoo (odooyun.com)

配置环境后期补充

 

安装和配置 Samba

作用:

Samba服务让我们能够在Linux下实现与Windows兼容的文件共享服务。在Debian/Ubuntu系统中,可以使用下列命令安装Samba服务:

$ sudo apt-get install samba samba-common-bin

samba包用于安装文件共享服务,smbpasswd工具需要samba-common-bin包。缺省情况下,用户需要通过smbpasswd注册后才能够访问文件的文件。我们需要注册一个用户odoo,然后为之设置一个密码用于文件共享访问:

$ sudo smbpasswd -a odoo

输入此命令后,将提示为为此用户输入密码,此密码用于访问共享的目录。完成后odoo用户将能够访问他的用户主目录,尽管只是只读访问。如果需要有写入权限,我们需要按下面的内容修改Samba的配置文件。

$ sudo nano /etc/samba/smb.conf

在配置文件中,查找到[homes]部分。编辑其相应配置行使其匹配如下配置:

[homes]
comment = Home Directories
browseable = yes
read only = no
create mask = 0640
directory mask = 0750

为了使配置生效,需要重启服务:

$sudo /etc/init.d/smbd restart

建议
下载示例代码
在Packt 账户中,您可以下载所有购买过的书籍的示例代码,Packt链接为:http://www.packtpub.com. 如果是从其他地方购买的书籍,您可以访问http://www.packtpub.com/support , 注册后便能通过邮件获取示例代码文件。

为了从Windows访问这些文件,我们可以使用特殊的用户名和定义为smbpasswd的密码来为路径 \\<my-server-name>\odoo 映射一个网络驱动。当使用odoo用户登录时,您可能会遇到Windows将计算机的域添加到用户名的问题(例如:MYPC\odoo)。为了避免这种情况,我们通过增加 \ 前缀的空域来登录(例如,\odoo):

1.jpg

如果我们用Windows Explorer来打开网络驱动,我们将能够访问和编辑odoo用户的主目录的内容:
2.pnguploading.4e448015.gif转存失败重新上传取消2.png

Odoo包含一些对开发者很有帮助的工具,我们将在整本书中用到它们。包括技术特点和开发者模式,默认状态下它们是关闭的,所以这是一个好机会去了解和启用它们。

 

==============以下开发步骤=============

1.虚拟机与windows通过vm共享文件夹

2.将虚拟机共享的目录文件夹 里面通过git安装odoo

git clone https://github.com/odoo/odoo.git -b 14.0 --depth=1 #指定14版本,和git一个历史版本减少下载

3.安装后在pycharm中open windows中的这个共享文件夹里面的代码,等待编译完成,在右键run odoo-bin 然后edit config... 编辑启动参数 添加-c odoo.conf

##odoo.conf文件内容

[options]
addons_path = D:\software\ODOO\odoo14\addons
data_dir = odoofile
db_host = 192.168.109.130
db_maxconn = 64
db_name = odoo
db_user = root
db_password = root
db_port = 5432
loglevel = debug
db_template = template0
longpolling_port = 8072
xmlrpc_port = 8012

通过启动即可

添加新模块

Odoo提供了脚手架机制来快速创建新模块,例如创建“modeName”的模块

odoo-bin scaffold modeName addons

进入【设置】,在【开发者工具】区域,点击 “ 启用开发者模式 ” 。

菜单栏上点击【更新应用列表】,进行 “模块更新”。

开发者调试模式

正常情况下,代码文件发生改变需要重启odoo进程或升级模块,对开发者来说,频发的Ctrl+C和upgrade有时候比较费事,Odoo提供了一种免重启的模式,当代码文件发生变化时自动重载并更新视图文件,大大简化了开发的步骤。

启动这个模式的命令是在启动odoo的命令后添加一个–dev参数:

1
odoo -c /etc/odoo/odoo.conf --dev=all

注意:可能会碰到下面的错误:

1
'inotify' module not installed. Code autoreload feature is disabled

这是因为缺少依赖库inotify, 使用pip命令安装即可:

1
pip install inotify

 

views.xml相关说明

关于form tree中的name说明;在界面中并无任何视图上的影响, 应该是用于编码人员区别代码作用,类似与TODO 的提示作用  比如note的说明效果

关于 many2one中的ondelete说明
restrict:     表示无删除按钮
不写ondelete:表示有删除按钮
no action:   表示无删除按钮

odoo权限文件ir.model.access.csv字段详解

id:权限id,默认规则是access_模块名_类名,还没发现有什么用
name:权限名,默认规则是模块名.类名,还没发现有什么用
model_id:id:这个是固定写法,规则是model_模块名_类名,其它地方引用权限会用这个id
group_id:id:组id,这里的base.group_user是系统内置组,即员工.员工组,创建帐户时,默认属于这个组。所以给这个组赋权限,相当于给新帐户的默认权限。
perm_read,perm_write,perm_create,perm_unlink:对应读、写、增加、删除权限,1是有权限,0是无权限,具体根据需要来设置权限

7.0之前的API

当年那是Odoo还叫OpenERP的时代,OpenObject对象的方法通常都需要带着几个固定的参数:cr,uid,ids,context等等,写起来很繁琐,比如下面的例子:

1
2
def btn_import(self,cr,uid,ids,context=None):
    ...

到了8.0,可能Odoo官方的开发人员也觉得这样写起来太繁琐了,于是乎,他们引入了新API,封装在api.py文件中,主要有一下几种类型:

  • model
  • multi
  • one
  • constrains
  • depends
  • onchange
  • returns

one

作用: 表示被封装的方法接受单一的对象,用于处理一些单个对象的方法。
返回值: [None](部分不负责的教程里说不返回值)
v7版本写法: def funct(self,cr,uid,ids,context)

举例:
视图文件中添加一个按钮,对应的触发方法:

1
2
3
@api.one
def button_test(self):
    self.name = "xxx"

multi

作用:表示被封装的方法接收一个集合对象,正好与one对应。
返回值: 被封装方法的返回值
v7版本写法: model.method(cr, uid, ids, args, context=context)

multi典型的用法即odoo对象的write方法:

1
2
3
4
@api.multi
def write(self, vals):
    res = super(Book, self).write(vals)
    return res

这里的self是一个集合对象,vals是待更新的字段和值的字典,这里的例子我们没有用到self,只是调用了父类的write方法,将vals写入到数据库中。如果我们要修改某个值,需要对self进行迭代,然后更新字段的值。

model

作用:self代表一个记录集合,但内容与记录集无关,只是与model类型相关。
返回值: 被装饰方法的返回值
v7版本写法: model.method(cr, args)

典型应用是对象的create方法:

1
2
3
@api.model
def create(self,vals):
    return super(Book,self).create(vals)

self是个对象集合,但是creat方法内部却与self这个集合没有关系,只是用了self的model类型,将vals的值进行创建操作。

contrains

作用:给某个字段添加限制条件
v7版本:是通过_constrains属性关联验证方法的方式实现

到了新API,不需要添加_constrains属性了,直接给校验方法添加constrains装饰即可。

1
2
3
4
5
6
age = fields.Integer(string="age")  

@api.constrains('age')
def _check_age(self):
    if self.age<16:
        raise ValueError(_('Age must be older than 16'))

这样就限制了age字段只能输入比16大的数据。

另外一种constrains

odoo支持另外一种添加限制的方式,即通过sql约束的方式。方法是在odoo类对象中添加_sql_constrains属性,值是一个包含了元组的列表,元组的三个值分别是约束名,约束条件和警告信息,看一个例子:

1
2
3
4
5
6
7
8
_sql_constraints = [
    ('name_description_check',
     'CHECK(name != description)',
     "The title of the course should not be the description"),
    ('name_unique',
     'UNIQUE(name)',
     "The course title must be unique"),
]

这样做的好处是,在数据库层面就限制了数据的校验,而不是在代码层面的校验,显然效率会更高。缺点是在添加限制之前,数据库中不能存在违反约束的数据,否则约束会添加失败。

depends

depends主要用于compute方法,v8当中已经取消了function字段,对于任何fields都可以通过添加compute属性动态赋值。depends就是用来标该方法依赖于哪些字段的装饰。

1
2
3
@api.depends('date')
def _get_book_age(self):
    self.age = (datetime.now().date() - self.date).days

对于compute方法来说,加不加depends装饰的区别在于,加了depends的方法会在依赖的字段发生改变时重新计算本字段的值,而不加depends的方法只在触发的第一次调用,也就是说不会持续更新。

returns

returns的用法主要是用来指定返回值的格式,它接受三个参数,第一个为返回值的model,第二个为向下兼容的method,第三个为向上兼容的method。

第一个参数如果是对象本身,则写’self’,如果是其他对象,则写其他对象名如:@api.returns(‘ir.ui.view’)。

例如:

1
2
3
4
5
6
@api.multi    @api.returns('mail.message', lambda value: value.id)
def message_post(self, **kwargs):
    if self.env.context.get('mark_so_as_sent'):
        self.filtered(lambda o: o.state == 'draft').with_context(tracking_disable=True).write({'state': 'sent'})
        self.env.user.company_id.set_onboarding_step_done('sale_onboarding_sample_quotation_state')
    return super(SaleOrder, self.with_context(mail_post_autofollow=True)).message_post(**kwargs)

returns主要用于确保新旧API返回值的一致,并不常用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值