1、命令行生成应用
./odoo-bin scaffold library_app /Users/phoenix/odoo/addons
命令行结束后生成如下模版文件:
(生产文件没有国家化文件夹,需要自己加进来, )
library_app/
├── __init__.py
├── __manifest__.py
├── controllers
│ ├── __init__.py
│ └── controllers.py
├── demo
│ └── demo.xml
├── models
│ ├── __init__.py
│ └── models.py
├── security
│ └── ir.model.access.csv
└── views
├── templates.xml
└── views.xml
2、配置脚架文件:
__init__.py: 内容如下, 就是加载两个必要的模块
# -*- coding: utf-8 -*-
from . import controllers
from . import models
__manifest__.py:内容如下,新模块的描述信息
*注这个配置, 不然它会默认成模块, 而不是应用 :"application": True,
基本不用改, 调整这个配置就好。
# -*- coding: utf-8 -*-
{
'name': "library_app",
'summary': """
Short (1 phrase/line) summary of the module's purpose, used as
subtitle on modules listing or apps.openerp.com""",
'description': """
Long description of module's purpose
""",
'author': "My Company",
'website': "https://www.yourcompany.com",
# Categories can be used to filter modules in modules listing
# Check https://github.com/odoo/odoo/blob/16.0/odoo/addons/base/data/ir_module_category_data.xml
# for the full list
'category': 'Uncategorized',
'version': '0.1',
"license": "AGPL-3",
"application": True,
# any module necessary for this one to work correctly
'depends': ['base'],
# always loaded
'data': [
'views/views.xml',
'views/templates.xml',
],
# only loaded in demonstration mode
'demo': [
'demo/demo.xml',
],
}
3、安装应用
重启服务器 -> 更新应用 -> 激活
1、注意,尽量先不定义模型、视图这些配置。可以后面通过升级来实现, 先确保应用安装成功
2、因为没有定义应用类别, 所以要在全部中找
3、已经点了激活, 显示安装成功
4、配置安装模型
1、在models文件夹下定义一个新模型文档:library_book.py
from odoo import fields, models
class Book(models.Model):
_name = 'library.book'
_description = '图书信息'
# 书名
name = fields.Char(string='Book Name', required=True)
# 发布日期
publish_date = fields.Date(string='Publish Date')
# 货币
currency_id = fields.Many2one('res.currency', string='Currency',
default=lambda self:
self.env.company.currency_id)
# 价格 货币字段,根据币种保留小数位数
price = fields.Monetary(string='Price', currency_field='currency_id')
# 作者
author_ids = fields.Many2many(comodel_name='res.partner', string='Author')
2、在引导文件中, 导入新建的模型。
library_app/models/__init__.py
注意, 时models文件夹下的引导文件, 不是根目录下的。
# -*- coding: utf-8 -*-
from . import models
from . import library_book
3、编辑权限控制文档
/security/ir.model.access.csv
第一行不用改, 注意改第二行,主要是替换:library_app、library_book两个关键字, 一个是应用,一个是模型
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_library_app_library_book,library_app.library_book,model_library_book,base.group_user,1,1,1,1
4、国际化-双语
/i18n/zh_CN.po, 应用脚架生成命令不会生成双语脚本, 从其他地方拷贝一个吧
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * event
#
# Translators:
# Martin Trigaux, 2022
#
#. module: event
#: model:ir.model.fields,field_description:event.field_res_partner__event_count
#: model:ir.model.fields,field_description:event.field_res_users__event_count
msgid "Book Name"
msgstr "书名"
#. module: event
#: model:ir.model.fields,field_description:event.field_res_partner__event_count
#: model:ir.model.fields,field_description:event.field_res_users__event_count
msgid "Publish Date"
msgstr "发布日期"
#. module: event
#: model:ir.model.fields,field_description:event.field_res_partner__event_count
#: model:ir.model.fields,field_description:event.field_res_users__event_count
msgid "Currency"
msgstr "币种"
#. module: event
#: model:ir.model.fields,field_description:event.field_res_partner__event_count
#: model:ir.model.fields,field_description:event.field_res_users__event_count
msgid "Price"
msgstr "价格"
#. module: event
#: model:ir.model.fields,field_description:event.field_res_partner__event_count
#: model:ir.model.fields,field_description:event.field_res_users__event_count
msgid "Author"
msgstr "作者"
5、升级应用:
6、升级后查看数据库
运行升级后, 数据库已经生成, 但为什么是两个表? 后面要分析一下。
5、添加视图
./views/library_book.xml 生成并编辑这个文件
注这几行, 它要跟模型和应用名字匹配:
菜单
<menuitem name="Library Management" id="menu_root"/>
<menuitem name="Library" id="menu_library_list"
parent="library_app.menu_root"
action="library_app.library_book_action_window"/>
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<!-- tree view -->
<record model="ir.ui.view" id="view_library_book_tree">
<field name="name">图书</field>
<field name="model">library.book</field>
<field name="arch" type="xml">
<tree string="Library">
<field name="name"/>
<field name="publish_date"/>
<field name="price"/>
<field name="author_ids" widget="one2many"/>
</tree>
</field>
</record>
<!-- form view -->
<record model="ir.ui.view" id="view_library_book_form">
<field name="name">view_library_book_form</field>
<field name="model">library.book</field>
<field name="arch" type="xml">
<form string="Library">
<sheet>
<group>
<group>
<field name="name"/>
<field name="currency_id"/>
</group>
<group>
<field name="publish_date"/>
<field name="price"/>
</group>
</group>
<notebook>
<page string="Author" name="applicability">
<field name="author_ids">
<tree no_open="True">
<field name="name"/>
<field name="phone" class="o_force_ltr"
optional="show"/>
<field name="email" optional="show"/>
<field name="city" optional="show"/>
<field name="state_id" optional="hide"
readonly="1"/>
<field name="country_id" optional="show"
readonly="1"/>
</tree>
</field>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<!-- 窗口动作 -->
<record model="ir.actions.act_window" id="library_book_action_window">
<field name="name">Library</field>
<field name="res_model">library.book</field>
<field name="view_mode">tree,form</field>
</record>
菜单
<menuitem name="Library Management" id="menu_root"/>
<menuitem name="Library" id="menu_library_list"
parent="library_app.menu_root"
action="library_app.library_book_action_window"/>
</data>
</odoo>
2、升级应用
3、打开应用
4、查看应用
(编辑中, 待续...............)