创建一个odoo应用

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、查看应用

(编辑中, 待续...............)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值