1、上传的文件保存路径根据启动的conf配置的data_dir目录下,系统迁移服务器的时候记得备份。
2、给H1增加label,<label for="name"/><field name="name"/>
3、设置—用户—群组:为每个应用程序划分级别,例如:经理、员工
4、开发完成的模块进行翻译,首先进入【设置—翻译—应用程序术语】,点击【同步术语】,执行完成之后进入【设置—翻译—应用程序术语—已翻译术语】搜索需要翻译的源术语,修改翻译值并保存。
5、设置—翻译—应用程序术语—已翻译术语 设置翻译
类型:字段、对象、报表/模板、选中内容、视图、帮助、代码、约束、SQL约束
- 对象,翻译字段是模型名称+逗号+字段名(ir.ui.view,arch_db),翻译数据库中某个字段内的数据
- 代码,翻译字段是一个文件的完整路径(addons/base/res/res_config.py),翻译某个文件中出现的文字,比如字段中help的内容、default的内容
- 选中内容,翻译字段是模型名称+逗号+字段名(ir.translation,state),翻译Selection类型字段中的值
- SQL约束,翻译字段是模型名称(res.country),翻译_sql_constraints内的错误提示内容
6、创建新模块
python odoo-bin scaffold goal D:\python\odoo10\addons
7、继承重写ir.actions.act_window不需要新的id,直接调用原id进行添加或修改
<record id="base.action_partner_supplier_form" model="ir.actions.act_window">
<field name="domain">[('supplier', '=', True)]</field>
</record>
8、title上删除“Odoo”修改以下文件
addons\web\static\src\js\abstract_web_client.js,54行
this.set('title_part', {"zopenerp": "Odoo"});
addons\web\views\webclient_templates.xml,198行
<title t-esc="title or 'Odoo'"/>
警告提示框删除odoo文字
addons\web\static\src\js\framework\crash_manager.js,第108行
title: "Odoo " + (_.str.capitalize(error.type) || _t("Warning"))
9、实时获取当前长时间、短时间
date = fields.Date(string=u'display_name', default=fields.Date.context_today, compute='_compute_dates', inverse='_inverse_dates', store=True, states={'done': [('readonly', True)]}, track_visibility='onchange')
datetime = fields.Datetime(string=u'display_name', default=fields.Datetime.now, readonly=True, copy=False, help='', compute='_methods_compute', store=True)
now = fields.Datetime.now()
date = fields.Date.today()
10、Selection类型字段继承扩展增加新选项
type = fields.Selection(selection_add=[('product', 'Stockable Product')])
11、通过代码跳转页面
@api.multi
def action_invoice_sent(self):
""" Open a window to compose an email, with the edi invoice template
message loaded by default
"""
self.ensure_one()
template = self.env.ref('account.email_template_edi_invoice', False)
compose_form = self.env.ref('mail.email_compose_message_wizard_form', False)
ctx = dict(
default_model='account.invoice',
default_res_id=self.id,
default_use_template=bool(template),
default_template_id=template and template.id or False,
default_composition_mode='comment',
mark_invoice_as_sent=True,
custom_layout="account.mail_template_data_notification_email_account_invoice"
)
return {
'name': _('Compose Email'),
'type': 'ir.actions.act_window',
'view_type': 'form',
'view_mode': 'form',
'res_model': 'mail.compose.message',
'views': [(compose_form.id, 'form')],
'view_id': compose_form.id,
'target': 'new',
'context': ctx,
}
12、获取本地ip
myname = socket.getfqdn(socket.gethostname())
myaddr = socket.gethostbyname(myname)
print request.context
print request.httprequest.remote_addr
print myname, myaddr
ipList = socket.gethostbyname_ex(socket.gethostname())
for i in ipList:
print i