自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(160)
  • 收藏
  • 关注

转载 odoo前端开发widget

在第九章 后端视图中已经学到,我们可以使用微件来以不同格式展示某些数据。例如,我们使用了widget='image’将二进制字段展示为图片。要演示如何创建自己的微件,我们将编写一个用户可以选择整型字段的微件,但我们将采用不同的展现方式。使用的不是输入框,而是展示为颜色拾取器,这样我们我们可以选择颜色数值。这里的数值与相关的颜色存在映射关系。

2023-05-22 16:48:44 1666

原创 odoo----xpath语法

odoo 视图函数 在整个项目文件中,结构并不是十分明显,虽然它也遵循MVC设计,类比django的MTV模式,各个模块区分的十分明显,在Odoo中,视图的概念不是特别明显,很多时候,我们会将调用模型的函数直接写在models里边(即:类中)。而对于模版Tempelate部分,odoo里边反而称做“views”,如下是odoo典型模块,销售模块sale的代码结构:可以看到odoo的前端显示部分,对应的就是views,它是基于xml来实现的,而不是我们日常的html;今天要说的xpath语法,就是针对于

2020-12-15 10:05:05 3133 1

原创 odoo----模块代码修改后如何生效?

很多朋友在odoo模块修改后,重启服务器或者更新升级模块后不生效,这主要是由于python文件JS文件的特性决定的,可根据以下步骤处理:修改 python 文件: 必须重启服务,以重写编译生产 *.pyc 文件。 如果是修改函数,不需要升级模块,如果修改模型字段或依赖关系,需要升级模块。修改 XML 文件: 不需要重启服务, 升级相关模块。修改CSS 文件: 刷新浏览器重新加载。修改JS 文件: 刷新浏览器重新加载。如果还是不可以,则重起服务器后,先卸载模块然后再重新安装即可...

2020-12-14 14:34:16 1661

原创 Odoo----模型的内置方法(可按需重写)

https://www.cnblogs.com/ygj0930/p/10826222.html模型层面一:_table_exist检查该模型对于的数据库表是否存在,是则返回1,否则返回0.@api.model_cr def _table_exist(self): pass模型记录层面二:create(self,vals)记录的创建函数,一般情况下,是根据视图传过来的dict对象,生成模型记录。我们可以重写create方法:1)获取vals参数,从中提前数据进行校验

2020-12-14 14:30:57 878

原创 Linux实时查看日志

以下以Tomcat为例子,其他WEB服务器目录自己灵活修改即可:先切换到:cd usr/local/tomcat5/logstail -f catalina.out这样运行时就可以实时查看运行日志了Ctrl+c 是退出tail命令。顺便讲一下linux中tail命令tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容.命

2020-12-10 14:59:23 1800

原创 Odoo-----View 常用技巧

视图控制隐藏Field<field name="currency_id" invisible="True"/><field name="currency_id" invisible="1"/>在某种条件下隐藏<field name="expense_description" attrs="{'invisible':[('expense_audit','!=','1')]}" />隐藏label<field name="descripti

2020-12-01 23:12:36 486

原创 Odoo----引入自定义css样式

定义Form页面<?xml version="1.0" encoding="utf-8"?><odoo> <data> <record id="myquality_iqcbasesetup_form" model="ir.ui.view"> <field name="name">myquality.iqcbasesetup.form</field> <f.

2020-12-01 22:59:12 1507

原创 python函数(关键字参数,默认参数,位置参数,不定长参数)

默认参数:定义函数的时候给定变量一个默认值。  def num(age=1):位置参数:调用函数的时候根据定义函数时的形参位置和实参位置进行引用。关键字参数:如果定义的函数中含有关键字参数,调用函数时必须要传如该关键字对应的实参。不定长参数:在定义函数的时候不确定传入的参数的数量(可能是0个或多个)  def num(args,**args): (不定长参数的标志符号是和**,args和kwargs只是变量的名字,可以改为任意的变量如(*num,**kwnum))*+变量名1,可以接受被其他参

2020-11-29 23:49:22 2450 1

原创 Odoo--saas开发

一、SaaS & 云计算—说起SaaS就绕不过云计算的概念,云计算的底层是基于虚拟化,从底层到上层,云计算包含三种服务模式,分别是:IaaS(Infrastructure-as-a-Service),基础设施即服务PaaS(Platform-as-a-Service),平台即服务SaaS(Software-as-a-Service),软件即服务SaaS模式,便是云计算的三种服务模式其中之一。上图中对比了传统IT服务架构和云计算几种服务架构,传统IT服务架构中,作为用户来讲,从底层

2020-11-19 10:56:23 1601

原创 Odoo----异常、错误、警告、提示、确认信息显示

1.检查业务逻辑中的错误,终止代码执行,显示错误或警告信息:raise osv.except_osv(_('Error!'), _('Error Message.'))示例代码:#删除当前销售单,需要验证销售单的状态 def unlink(self, cr, uid, ids, context=None): for rec in self.browse(cr, uid, ids, context=context): if rec.state not i

2020-11-19 10:46:02 2505

原创 Odoo----定义字段获取当前用户名

场景描述:在一些视图下,当系统用户创建某条记录的时候,需要给某个用户字段设置默认值,即:默认值为系统的当前登录用户,如何实现?处理方式:在定义模型的时候,给该字段赋值就可以:operator_uid = fields.Many2one(string=u"操作员", comodel_name='res.users', default=lambda self: self.env.user)...

2020-11-19 10:41:02 1817

原创 Odoo----跟踪字段值的改变(日志记录)

跟踪重要字段值的改变是ERP系统里面重要功能,也是审计的内容,SAP也是因为有这样的功能备受审计们的青睐,而作为业务管理经理们,在追责的过程中,也需要此项功能作为辅助手段。以前开发ERP系统的时候,弟兄们做这个功能吃力不讨好,因为在功能提升上不显著,而且会涉及到每个模块增加调整工作量,没少吃白眼。现在好了,Odoo有这个框架,可以很容易的实现这个审计追踪的功能,只需要在关键字段定义处添加:track_visibility=“always”我们把病人姓名和年龄作为需要跟踪修改的字段,只要修改patien

2020-11-19 10:37:12 1416

原创 Odoo----Compute Field计算字段

什么叫Compute Field?直接翻译过来就是计算字段,也就是说它的结果依赖于其他数据的计算结果或判断结果。我们今天在这里讲解的就是这种类型的字段如何在Odoo实现。病人有年龄之分,我们让系统根据年龄进行分组显示。首先,我们要建立一个年龄分组的计算字段age_group,分别在patient.py实现计算功能,在patient_menu.xml的Form View和Tree View里面添加这个年龄分组的计算字段用于编辑和显示patient.py: 要点在compute=‘set_age_grou

2020-11-19 10:34:42 1510 2

原创 Odoo----from视图中显示每条记录的名称

截止到目前,我们Hospital模块的Patient数据显示在Form上有点奇怪,就是在标题栏位显示出来的是Odoo保存的这条记录的自动编号(hospital.patient,1),这个就不太友好和直观了。我们通常的做法是显示病人的姓名,或者说显示名称,因为中国公司里面外国人越来越多,有的人证件上的名字又20个字符那么长,但是他们通常用简称,像Odoo这样的系统就很好的提供了这种支持, 首先要升级一下patient.py代码,增加一个patient_disp_name并赋给Odoo的一个系统字段_rec

2020-11-19 10:03:05 569

原创 Odoo-----在Form视图中添加Chatter

标准的Odoo表单界面下面都提供有聊天,登记日志,安排下一期工作和添加附件的功能,这个功能英文叫Chatter首先,我们要改造一下patient.py,就添加了_inherit这一行。不过mixin类是一个Odoo用于多重继承扩展的类型,非常有用,很好的诠释了编码的DRY(Don’t Repeat Yourself)原则。mixin类我们后面再详细谈class HospitalPatient(models.Model): _name = 'hospital.patient' _inher

2020-11-19 09:58:55 771

原创 Odoo-----视图继承

简介继承在odoo里可以通过继承的方式来改写已经存在的view对比view的定义视图定义中写法多了inherit_idinherit_id指向要改写的view <field name="inherit_id" ref="id_category_list"/>在arch里用xpath定位改写的元素<!-- 改写 ibuilding list 列表视图 --><record id="building_list_view" model="ir.ui.

2020-11-19 09:33:38 2567 6

原创 Odoo-----计算字段、onchange 机制、模型约束

DomainDomain 代表记录集的条件表达式。Domain 是定义模型子集的规则集合。每个规则是一个包含名称、操作和值的三元组例如,下面是Product模型子集的Domain表达式,“单价大于1000且类型为服务”的记录集:[('product_type', '=', 'service'), ('unit_price', '>', 1000)]多个规则组合时,默认条件组合方式是AND。逻辑运算符&(AND),|(OR),!(NOT)可以用来显示的组合多个规则。它们在前缀位置使用(

2020-11-18 10:18:05 1437

原创 Odoo-----字段常用属性

隐藏字段<field name="currency_id" invisible="True"/><field name="currency_id" invisible="1"/>在某种条件下隐藏<field name="expense_description" attrs="{'invisible':[('expense_audit','!=','1')]}" />隐藏标签<field name="description" widget="html"

2020-11-16 22:47:05 600

原创 Odoo-----JS的继承机制

ODOO中JS的继承有什么用?odoo官方文档戳这里Odoo中有相当多的视图,挂件等组件,在产品拥有个性化定制需求的时候,我们要修改某些widgets或者classes,那么就需要理解Odoo中前端框架的JS架构,并且掌握继承JS的方法。JS继承方法var new_class = demo_class.extend({ demo_method: function() { return "demo class"; },});使用extend()方法可以新建子类,编

2020-11-16 13:45:30 781

原创 Odoo-----Javascript 参考指南

本文介绍了odoo javascript框架。从代码行的角度来看,这个框架不是一个大的应用程序,但它是非常通用的,因为它基本上是一个将声明性接口描述转换为活动应用程序的机器,能够与数据库中的每个模型和记录交互。甚至可以使用Web客户端修改Web客户端的接口。这里有一个有用的html版本的文档:Javascript API概览这个Javascript框架主要设计用于三个地方使用:web客户端:这是一个私有的web应用,可以在其中查看和编辑业务数据。这是一个单页应用程序(永远不会重新加载该页,只在

2020-11-16 13:40:57 2100

原创 Odoo-----button 应用

按钮< button>,支持的属性:icon 可用的icon在 addons/web/static/src/img/iconsstring 按钮的显示文字type 值可以是 workflow, object action 默认是 workflowname 就是要触发的方法标识args 传递方法的参数content 上下文confirm 针对对话框的确认special="cancel" 用于向导states 可见的状态classname 加载的类名(常用 oe_h

2020-11-13 20:30:14 1368

原创 Odoo----env详解

一:environmentenvironment类提供了对ORM对象的封装,同时提供了:1)注册类的访问:对于继承Model类来说可以直接通过self.env对environment进行操作。2)记录集的缓存:清除缓存可以使用environment对象的invalidate_all()方法进行。3)管理重计算的数据结构。二:env的属性列表user:返回当前用户self.env.user lang:返回当前语言代码self.env.lang in_draft:返回是否处

2020-11-09 14:22:27 1421

原创 Odoo----如何使用context

<field name="partner_id" string="Customer"widget="res_partner_many2one"context="{'default_name': contact_name, 'default_street': street, 'default_city': city, 'default_state_id': state_id, 'default_zip': zip, 'default_country_id': country_id, 'default

2020-11-09 14:05:45 1511

原创 Odoo----如何更新context

Odoo开发人员在工作过程中都会遇到需要向self. env. context添加一些东西的问题。 他们不知道该怎么做。 今天让我们更详细地讨论这个问题。 因此,何时需要更新上下文:1)您需要设置一些默认值2)您需要发送想要在其他函数中获取的某种信息什么是context要获得答案,我们将参考以下Odoo.com提供的responses:context是python字典,用于将某些数据传递给方法。由于几乎所有方法都具有context参数,因此您可以使用context通过多个级别的python方法传

2020-11-09 13:55:48 1497 1

原创 Odoo---- @api.onchange使用

【οnchange=前端js函数,可以实现前端实时更新以及修改验证】onchange机制:不需要保存数据到数据库就可以实时更新用户界面上的显示。@api.onchange('监听的字段', '监听的字段'。。。)def _onchange_受影响的字段(self): # set auto-changing field self.受影响的字段 = 根据监听字段计算出受影响字段的值也可以监控某字段值的变化,如果异常则报错:@api.onchange('监听的字段')def _ver

2020-11-09 13:26:11 1499

原创 Odoo----hooks的使用

挂钩是在现有代码之前,之后或代替现有代码执行的函数。在odoo中,挂钩是在模块的__init__.py内部定义的函数的字符串表示形式。简单理解就像一些外来的钩子,在源代码之间钩取一些信息,当捕捉到感兴趣的事时,就拦截下来,让自己的代码执行一下,处理一下这个信息,然后再放出去继续之前的进程。这样就可以在不用改变源代码的情况下,做一些别的事情,比方说监控、分析和一些恶意的事引用知乎上著名的示意图在odoo挂钩中,以下类型的挂钩:pre_init_hookpost_init_hook

2020-11-07 16:37:32 1045

原创 Odoo----wizard 向导页的使用方法

概述Odoo 中有不少地方涉及对话向导页面模式,这种功能页很方便灵活,可以随意产生自已定义的表单/动作交互操作流,下面我们就举例讲解具体使用方法方法以odoo中“更新模块列表”这个操作为例定义模型class BaseModuleUpdate(models.TransientModel): _name = "base.module.update" _description = "Update Module" updated = fields.Integer('Number

2020-11-06 15:25:47 1876

原创 python实现smtp协议发送邮件

协议简介:SMTP协议(simple mail transfer protocol) 简单邮件传输协议定义了邮件客户端与SMTP服务器之间、两台SMTP服务器之间的通信规则分为标准SMTP协议和扩展SMTP协议。扩展SMTP协议在标准SMTP协议上增加了邮件安全的认证通信双方采用一问一答的命令/响应模式底层基于TCP/IP的应用层协议、默认网络监听号25直接由自己搭建的邮件服务器发送,我这里ubuntu正在配置 smtplocalhost.py# -*- coding: utf-8 -*-

2020-11-06 15:16:56 2610 2

原创 Odoo----self详解

介绍python中一切皆对象!odoo基于python开发,那么odoo中也可以理解成一切皆对象。我们在python中定义类的时候,一般会用到self,用来表示当前对象自己。那么odoo中的self除了python语法中,自带的用法,还有哪些特殊的用法呢?一:self是什么目前新版的Odoo中使用到的self,是对 游标cr、用户ID、模型、上下文、记录集、缓存 的封装。我们可以通过 self.XX 获取到这些封装的东西,比如:self.cr、self.uid。对象self.env提供

2020-11-05 16:53:24 868

原创 python 接收邮件(pop3与imap)

首先是pop3与imap的区别:简单来说主要区别就是imap可以不用把所有的邮件全部下载,就通过客户端直接对服务器上的邮件进行操作。IMAP它只下载邮件的主题,并不是把所有的邮件内容都下载下来.pop3import poplibemailServer = poplib.POP3('192.168.88.7')emailServer.user('qa01@corp.globalmarket.com')emailServer.pass_('123456')# 获取一些统计信息emailMs

2020-11-05 11:05:30 1757

原创 Odoo----Qweb简单介绍

定义:Qweb被用作OpenERP的web客户端模板引擎。它是一种基于XML的模板语言。特征:完全在客户端浏览器中完成渲染一个模板文件中可以包含多个模板,通常一个模板文件中包含一个模板对OpenERP的web组件有很好的支持,也可以用于除开OpenERP web外的其他框架Odoo中的Qweb关键点说明Qweb模板在XML属性上加前缀“t-”表示t-name:模板名称,如:<t t-name="message"></t>t-foreach=iter

2020-10-27 16:09:40 1897

原创 Odoo----odoo13版本更新内容

总结了 odoo12 --> odoo13 的部份不同,分为 1 模型,2 视图,3 前端开发, 4 业务逻辑三大部份Tip: 可通过指令操作找出需要改的后端代码grep -nri 'oldname\|sudo([^\)]\+)\|api.multi\|api.returns\|api.one\|api.cr\|api.model_cr\|12.0\|compute=' $MODULE1.废除 @api.multi等13的后端方法直接def,不允许再跟此装饰器,因为已废除2.移除下面

2020-10-26 09:12:41 432

转载 Odoo----的消息系统 - Mail 模块 - Discuss 应用

Odoo 的 Mail 就是那个 Discuss 应用,但同时也是一个基础模块。所谓基础模块,就是几乎所有的 Odoo 应用都依赖了 Mail 模块。一般来说 打开 Odoo 默认应用就是 Discuss,在 Discuss 中可以收发邮件,建立 Channel,收发相关 Channel 的消息。所谓 Channel 就是一个对话过程,有一对一的,也有多人的(就是聊天群)。通过建立 Channel 可以和 Odoo 的用户进行实时消息通讯。以前我曾经写过一个 Odoo 的登录用户是如何监听自己所关心的

2020-10-24 17:30:38 1654 1

原创 Python3 assert(断言)

assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况,例如我们的代码只能在 Linux 系统下运行,可以先判断当前系统是否符合条件。语法格式如下:assert expression等价于:if not expression: raise AssertionErrorassert 后面也可以紧跟参数:assert expression [, arguments]等

2020-10-22 15:18:36 304

原创 Odoo----constraints 使用

Odoo中的约束一:装饰器约束(字段约束)装饰器参数指定了约束的字段,当涉及的字段中任一发生改变时触发方法执行。如果不满足约束条件,该方法将引发异常。@api.constrains('约束字段')def _check_something(self): for record in self: if record.约束字段 op 值: raise ValidationError("异常信息")Constraints:@api.constrains('instructo

2020-10-22 14:12:21 888

转载 Docker容器安全性分析

Docker是目前最具代表性的容器技术之一,对云计算及虚拟化技术产生了颠覆性的影响。本文对Docker容器在应用中可能面临的安全问题和风险进行了研究,并将Docker容器应用环境中的安全机制与相关解决方案分为容器虚拟化安全、容器安全管理、容器网络安全三部分进行分析。一、从虚拟化安全到容器安全1、传统虚拟化技术虚拟化技术是实现硬件基础设施资源的充分利用、合理分配和有效调度的重要技术手段。例如,在基于OpenStack的典型IaaS服务中,云服务提供商可通过搭建设备集群建立资源池,并将服务器、存储和网络等

2020-08-16 10:28:50 2031

原创 Odoo----高级服务端开发技巧

修改运行指定动作用户在书写业务逻辑代码时,常会需要在不同权限上下文中操作动作,比如使用管理员权限绕过权限检查。下面我们来看一下普通用户如何使用 sudo()来修改公司电话号码。默认仅 Administration/Access Rights 用户组的用户可修改 res.company 记录。from odoo import models, apiclass ResCompany(models.Model): _inherit = 'res.company' @api.multi

2020-07-25 09:41:40 602

转载 Odoo----调试与自动化测试

标题生成服务器日志来帮助调试方法服务器崩溃时使用日志可以帮助查看运行时的情况,下面介绍如何为现有方法添加日志。例如下面的代码中加入了日志语句,存储产品的库存等级到一个文件中from os.path import join# 1. 代码开头从 Python 标准库引用 logging 模块import logging from odoo import models, api, exceptions EXPORTS_DIR = '/srv/exports'# 2.在定义模型类之前,为模块获取

2020-07-24 17:26:44 1638

原创 odoo----相关知识点

导入模块可以起别名:新的模型前端要调用显示有关联的另一个模型的相关字段传递上下文 搜索视图打开默认按照接收的参数搜索显示:发起端视图 上下文写法:目标端 触发显示,搜索视图写法 注意字段名要写对!!!前端显示 模型名 而不是指定的字段名原因是,后台模型里边没有写 _rec_namexml中option 作用:模型中字段如果 添加store=True属性 那么comput方法会不执行!!!向导视图前端字段 显示 隐藏的写法。取消隐藏 关联字段的创

2020-07-24 17:03:37 464

原创 odoo----权限机制

第一篇:http://www.cnblogs.com/dancesir/p/6994030.htmlOdoo的权限的核心是权限组(res_groups)。对每个权限组,可以设置权限组的菜单表示,对象表示,记录规则表示,字段表示。1.菜单/对象级别设置哪些人可以访问哪些菜单/对象,对象的访问权限包括创建、读、写、删除。2.记录级别设置哪些人可以访问哪些记录,也就是设置表的查询条件。3.字段级别设置表中的字段的访问权限。4.工作流级别在工作流的每一步迁移中,设置哪些角色允许触发本迁移菜单/对

2020-07-24 16:54:28 999

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除