Odoo 10開発チュートリアル1(構築モジュール)
13069 ワード
警告このチュートリアルではodooをインストールする必要があります
Odooサーバの起動/停止
OdooはC/Sアーキテクチャを採用し、クライアントはWebブラウザを通じてサービス側にアクセスし、RPCプロトコルに従う.ビジネスロジックおよび拡張は、通常、サービス側で実行されますが、クライアントがサポートする新しいフィーチャーを追加するだけで、クライアントにコードが追加されます(たとえば、インタラクティブなプロセスで新しいデータのマッピング表現).サーバを起動します.shellでコマンドodoo-binを呼び出すか、完全なパス名で呼び出すだけです.
Odooサービスは、
Odooモジュールの構築
サービス側の拡張とクライアント拡張はモジュールとしてカプセル化され、これらのモジュールは選択的にインストールされ、インストールが完了したらデータベースを介してロードされます.モジュールは、新しいビジネスロジックであってもよいし、既存のビジネスロジックを変更および拡張してもよい.例えば、中国の会計モジュールを作成し、中国の会計準則をOdooの汎用会計に追加したり、新しいリアルタイム可視化管理チームのモジュールを作成したりすることができます.Odooのすべての機能はモジュールに含まれています.
モジュールの構成
Odooモジュールには、Odooフレームワークによって自動的に永続化されるビジネスオブジェクトPythonクラスと、クラスの定義によって永続化される複数の部分が含まれています.データファイルには、XMLまたはCSVファイルで定義されるビュー、メニュー、アクション、ワークフロー、パーミッション、プレゼンテーションデータなどが含まれます.Webコントローラは、Webブラウザの静的ページデータサイトまたはインタフェースの使用を要求するピクチャ、CSSまたはJavaScriptファイルを処理する
モジュール構造
各モジュールは、モジュールディレクトリのサブディレクトリです.モジュールディレクトリのパスは、
プロンプトほとんどのコマンドラインオプションは、プロファイルで設定できます.
Odooモジュールはインベントリファイルによって宣言されます.詳細については、インベントリファイルのドキュメントを参照してください.モジュールは
Odooは、新しいモジュールを迅速に作成するための足場メカニズムを提供し、
このコマンドは、モジュールのサブディレクトリを作成し、モジュールの標準ファイルを自動的に作成します.これらのファイルの多くは、コメントされたコードとXML要素のみを含んでいます.これらのファイルの意味は後述する.
練習作成モジュール上のコマンドラインを使用して空のモジュールOpen Academyを作成し、Odooにインストールします.呼び出しコマンド モジュール内の関連ファイル を修正する他のファイル を変更しないでください.
オブジェクトリレーションシップマッピング
OdooのキーコンポーネントはORM層です.このレイヤは、大量の手書きSQLを回避し、拡張性とセキュリティを提供します.ビジネス・オブジェクトは、
モデルフィールド
フィールドは、モデルに格納するコンテンツと格納場所を定義します.フィールドはクラスのプロパティによって定義されます.
共通属性はモデルと同様に、フィールドを構成することもできます.フィールドは属性パラメータによって構成されます.
いくつかのプロパティは、最も一般的なプロパティです.
単純フィールドには、単純フィールドと関連フィールドの2つの種類があります.単純フィールドの値はモデルテーブルに格納された原子値であり、関連フィールドはモデル(同じモデルまたは異なるモデル)を指すレコード行です.単純フィールドの例としては、Boolean、Date、Char関連フィールドの例として、Many 2 One、One 2 May、Many 2 Mayが挙げられる
予約フィールドOdooは、システムによって管理され、ユーザプログラムが書き込むべきではない固定フィールドをすべてのモデルに作成します.ただし、
特殊フィールドのデフォルトでは、Odooのnameはすべてのモデルに表示および検索のためのフィールドが必要です.これらの目的のためのフィールドは、フィールド
Openacademyモジュールで新しいデータモデルカリキュラムを定義するモデルの定義を練習します.各カリキュラムには、必須フィールドである2つのフィールド、タイトル、説明が含まれています.ファイル
データファイル
Odooは高度なデータ駆動システムで、動作はPythonコードで作成されていますが、一部のモジュールの値はロード時にデータファイルで設定されています.
ヒント:一部のモジュールの役割は、Odooにデータを追加するためだけです.
モジュールデータは、 である. を可能にする. でもよい.
練習はプレゼンテーションデータを定義し、プレゼンテーションデータを追加してCourseモデルのデータを埋め込み、ファイル
操作とメニュー
アクションとメニューは、データベース内の通常のデータであり、通常はデータファイルで宣言されます.操作は3つの方法でトリガーすることができる:1.メニュー項目をクリック(特定の操作にリンク)2.操作に接続されている場合は、ビュー内のボタンをクリックします.オブジェクトとしてのコンテキスト操作は、メニューの宣言が比較的複雑であるため、
危険操作はXMLファイルの対応するメニューの前に宣言しなければならない.データファイルは順番に実行され、操作の
新しいメニュー項目の定義を練習し、オープンアカデミーメニュー項目の下で新しいメニュー項目を定義してコースにアクセスします.ユーザーは次のことができるはずです.全コースのリストを表示 カリキュラムを作成または編集します.
Odooサーバの起動/停止
OdooはC/Sアーキテクチャを採用し、クライアントはWebブラウザを通じてサービス側にアクセスし、RPCプロトコルに従う.ビジネスロジックおよび拡張は、通常、サービス側で実行されますが、クライアントがサポートする新しいフィーチャーを追加するだけで、クライアントにコードが追加されます(たとえば、インタラクティブなプロセスで新しいデータのマッピング表現).サーバを起動します.shellでコマンドodoo-binを呼び出すか、完全なパス名で呼び出すだけです.
odoo-bin
Odooサービスは、
Ctrl-c
または対応するシステムプロセスを殺すことによって停止される.Odooモジュールの構築
サービス側の拡張とクライアント拡張はモジュールとしてカプセル化され、これらのモジュールは選択的にインストールされ、インストールが完了したらデータベースを介してロードされます.モジュールは、新しいビジネスロジックであってもよいし、既存のビジネスロジックを変更および拡張してもよい.例えば、中国の会計モジュールを作成し、中国の会計準則をOdooの汎用会計に追加したり、新しいリアルタイム可視化管理チームのモジュールを作成したりすることができます.Odooのすべての機能はモジュールに含まれています.
モジュールの構成
Odooモジュールには、Odooフレームワークによって自動的に永続化されるビジネスオブジェクトPythonクラスと、クラスの定義によって永続化される複数の部分が含まれています.データファイルには、XMLまたはCSVファイルで定義されるビュー、メニュー、アクション、ワークフロー、パーミッション、プレゼンテーションデータなどが含まれます.Webコントローラは、Webブラウザの静的ページデータサイトまたはインタフェースの使用を要求するピクチャ、CSSまたはJavaScriptファイルを処理する
モジュール構造
各モジュールは、モジュールディレクトリのサブディレクトリです.モジュールディレクトリのパスは、
--addons-path
オプションで指定できます.プロンプトほとんどのコマンドラインオプションは、プロファイルで設定できます.
Odooモジュールはインベントリファイルによって宣言されます.詳細については、インベントリファイルのドキュメントを参照してください.モジュールは
__init__.py
ファイルを含むPythonパッケージであり、__init__.py
ファイルはモジュールに必要なインポートの各Pythonファイルを含む.たとえば、モジュールにmymodule.py
ファイルが含まれている場合、__init__.py
は次のように書く必要があります.from . import mymodule
Odooは、新しいモジュールを迅速に作成するための足場メカニズムを提供し、
odoo-bin
サブコマンドscaffold
は、空のモジュールを作成するために使用されます.$ odoo-bin scaffold
このコマンドは、モジュールのサブディレクトリを作成し、モジュールの標準ファイルを自動的に作成します.これらのファイルの多くは、コメントされたコードとXML要素のみを含んでいます.これらのファイルの意味は後述する.
練習作成モジュール上のコマンドラインを使用して空のモジュールOpen Academyを作成し、Odooにインストールします.
odoo-bin scaffold openacademy addons
openacademy/__manifest__.py
# -*- coding: utf-8 -*-
{
'name': "Open Academy",
'summary': """Manage trainings""",
'description': """
Open Academy module for managing trainings:
- training courses
- training sessions
- attendees registration
""",
'author': "My Company",
'website': "http://www.yourcompany.com",
# Categories can be used to filter modules in modules listing
# Check https://github.com/odoo/odoo/blob/master/odoo/addons/base/module/module_data.xml
# for the full list
'category': 'Test',
'version': '0.1',
# any module necessary for this one to work correctly
'depends': ['base'],
# always loaded
'data': [
# 'security/ir.model.access.csv',
'templates.xml',
],
# only loaded in demonstration mode
'demo': [
'demo.xml',
],
}
openacademy/__init__.py
# -*- coding: utf-8 -*-
from . import controllers
from . import models
openacademy/controllers.py
# -*- coding: utf-8 -*-
from odoo import http
# class Openacademy(http.Controller):
# @http.route('/openacademy/openacademy/', auth='public')
# def index(self, **kw):
# return "Hello, world"
# @http.route('/openacademy/openacademy/objects/', auth='public')
# def list(self, **kw):
# return http.request.render('openacademy.listing', {
# 'root': '/openacademy/openacademy',
# 'objects': http.request.env['openacademy.openacademy'].search([]),
# })
# @http.route('/openacademy/openacademy/objects//', auth='public')
# def object(self, obj, **kw):
# return http.request.render('openacademy.object', {
# 'object': obj
# })
openacademy/demo.xml
openacademy/models.py
# -*- coding: utf-8 -*-
from odoo import models, fields, api
# class openacademy(models.Model):
# _name = 'openacademy.openacademy'
# name = fields.Char()
openacademy/security/ir.model.access.csv
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
access_openacademy_openacademy,openacademy.openacademy,model_openacademy_openacademy,,1,0,0,0
openacademy/templates.xml
オブジェクトリレーションシップマッピング
OdooのキーコンポーネントはORM層です.このレイヤは、大量の手書きSQLを回避し、拡張性とセキュリティを提供します.ビジネス・オブジェクトは、
Model
クラスの拡張クラスとして宣言され、永続層に自動的に統合されます.定義時にプロパティを設定することで、モデルを構成できます.最も重要な属性は_name
で、Odooシステム内のモジュールの名前を定義する必須属性です.最も簡単なモデル定義:from odoo import models
class MinimalModel(models.Model):
_name = 'test.model'
モデルフィールド
フィールドは、モデルに格納するコンテンツと格納場所を定義します.フィールドはクラスのプロパティによって定義されます.
from odoo import models, fields
class LessMinimalModel(models.Model):
_name = 'test.model2'
name = fields.Char()
共通属性はモデルと同様に、フィールドを構成することもできます.フィールドは属性パラメータによって構成されます.
name = field.Char(required=True)
いくつかのプロパティは、最も一般的なプロパティです.
string(unicode,default: field's name)
ユーザーインタフェースのフィールドラベル(ユーザー表示)required(bool,default:False)
Trueの場合、このフィールドは空ではありません.デフォルト値が必要か、レコードの作成時に常に値が指定されている必要があります.help (unicode, default: '')
ロングフォーマットで、ユーザーインタフェースに表示されるプロンプト.index (bool, default: False)
は、Odooがカラムにデータベースインデックスを作成するように要求します.単純フィールドには、単純フィールドと関連フィールドの2つの種類があります.単純フィールドの値はモデルテーブルに格納された原子値であり、関連フィールドはモデル(同じモデルまたは異なるモデル)を指すレコード行です.単純フィールドの例としては、Boolean、Date、Char関連フィールドの例として、Many 2 One、One 2 May、Many 2 Mayが挙げられる
予約フィールドOdooは、システムによって管理され、ユーザプログラムが書き込むべきではない固定フィールドをすべてのモデルに作成します.ただし、
id(Id)
モデルに記録された一意識別子create_date(Datetime)
に記録された作成日create_uid(Many2one)
に記録されたユーザwrite_date(Datetime)
に記録された最終修正時間write_uid(Many2one)
に記録されたユーザをユーザプログラムで読み取ることができる特殊フィールドのデフォルトでは、Odooのnameはすべてのモデルに表示および検索のためのフィールドが必要です.これらの目的のためのフィールドは、フィールド
_rec_name
を設定することによって実現することができる.Openacademyモジュールで新しいデータモデルカリキュラムを定義するモデルの定義を練習します.各カリキュラムには、必須フィールドである2つのフィールド、タイトル、説明が含まれています.ファイル
openacademy/models/models.py
は、Course
クラスを含むように編集される.openacademy/models.py
from odoo import models, fields, api
class Course(models.Model):
_name = 'openacademy.course'
name = fields.Char(string="Title", required=True)
description = fields.Text()
データファイル
Odooは高度なデータ駆動システムで、動作はPythonコードで作成されていますが、一部のモジュールの値はロード時にデータファイルで設定されています.
ヒント:一部のモジュールの役割は、Odooにデータを追加するためだけです.
モジュールデータは、
要素を有するXMLデータファイルによって宣言される.各
要素は、データベース内のレコード行を作成または更新します.
{a value}
model
は、記録行に記録するOdooモデル名id
は外部識別子であり、参照レコード(データベース内の識別子を知る必要はない)
、各
はデータ行のフィールドに対応し、name属性はフィールド名(例えばdescription)であり、body
はフィールドの値である.データファイルはmanifestファイル宣言によってロードされ、data
リスト宣言(常にロード)でもdemo
リスト宣言(プレゼンテーションモードでのみダウンロード)練習はプレゼンテーションデータを定義し、プレゼンテーションデータを追加してCourseモデルのデータを埋め込み、ファイル
openacademy/demo/demo.xml
を編集してプレゼンテーションデータを追加するopenacademy/demo/demo.xml
Course 0
Course 0's description
Can have multiple lines
Course 1
Course 2
Course 2's description
操作とメニュー
アクションとメニューは、データベース内の通常のデータであり、通常はデータファイルで宣言されます.操作は3つの方法でトリガーすることができる:1.メニュー項目をクリック(特定の操作にリンク)2.操作に接続されている場合は、ビュー内のボタンをクリックします.オブジェクトとしてのコンテキスト操作は、メニューの宣言が比較的複雑であるため、
のショートカットがir.ui.menu
のメニューオブジェクトを宣言し、対応する操作に接続しやすくする.
Ideas
idea.idea
tree,form
危険操作はXMLファイルの対応するメニューの前に宣言しなければならない.データファイルは順番に実行され、操作の
id
は、対応するメニューが確立される前にデータベースに存在しなければならない.新しいメニュー項目の定義を練習し、オープンアカデミーメニュー項目の下で新しいメニュー項目を定義してコースにアクセスします.ユーザーは次のことができるはずです.
openacademy/views/openacademy.xml
が作成され、操作をトリガできるメニュー項目が作成される.2.このファイルをopenacademy/__manifest__.py
の下のdata
リストに追加します.openacademy/__manifest__.py
'data': [
# 'security/ir.model.access.csv',
'templates.xml',
'views/openacademy.xml',
],
# only loaded in demonstration mode
'demo': [
openacademy/views/openacademy.xml
Courses
openacademy.course
form
tree,form
Create the first course