모듈 만들기¶
첫 번째 모듈을 만들기 전에Odoo.sh 프로젝트를 생성하고 GitHub 리포지토리 URL을 알아야 합니다.
용어집
~/src는 Odoo 프로젝트와 관련된 Git 리포지토리가 위치한 디렉토리입니다.odoo는 GitHub 사용자입니다.odoo-addons는 GitHub 리포지토리입니다.feature-1은 개발 브랜치의 이름입니다.main은 프로덕션 브랜치의 이름입니다.my_module은 모듈의 이름입니다.
필요에 따라 이를 교체하세요.
개발 브랜치 만들기¶
브랜치 뷰에서:
브랜치 탐색 패널에서개발옆의 + (새 개발 브랜치) 버튼을 클릭합니다.
포크아래에서
main브랜치를 선택합니다.대상아래에
feature-1을 입력합니다.
빌드가 준비되면에디터와~/src/user폴더에서 개발 브랜치의 코드에 액세스할 수 있습니다.
다음 명령을 실행하여 컴퓨터에 GitHub 리포지토리를 클론합니다:
mkdir ~/src cd ~/src git clone https://github.com/odoo/odoo-addons.git cd ~/src/odoo-addons
다음을 실행하여 새 브랜치를 생성합니다:
git checkout -b feature-1 main
모듈 구조 생성하기¶
스캐폴딩¶
필수는 아니지만 스캐폴딩을 사용하면 기본 Odoo 모듈 구조를 설정하는 번거로움을 피할 수 있습니다. odoo-bin실행 파일을 사용하여 새 모듈을 스캐폴드할 수 있습니다.
에디터터미널에서 다음을 실행합니다:
odoo-bin scaffold my_module ~/src/user/
컴퓨터에Odoo가 설치되어 있으면 다음을 실행합니다:
./odoo-bin scaffold my_module ~/src/odoo-addons/
팁
컴퓨터에 Odoo를 설치하고 싶지 않다면이 모듈 구조 템플릿을 다운로드할 수도 있습니다. my_module의 모든 항목을 원하는 이름으로 교체하세요.
아래 구조가 생성됩니다:
my_module
├── __init__.py
├── __manifest__.py
├── controllers
│ ├── __init__.py
│ └── controllers.py
├── demo
│ └── demo.xml
├── models
│ ├── __init__.py
│ └── models.py
├── security
│ ├── ir.model.access.csv
│ └── models.py
└── views
├── templates.xml
└── views.xml
경고
모듈 이름을 지을 때는 영숫자 (a-z, 0-9) 또는 밑줄 (_)만 사용하세요. 모듈 이름은 Python 클래스에 사용되며, 밑줄 이외의 특수 문자를 포함하는 클래스 이름은 Python에서 유효하지 않습니다.
다음 파일의 주석을 해제하세요:
models/models.py는 필드가 포함된 모델의 예제입니다views/views.xml은 트리 및 폼 뷰와 이를 여는 메뉴입니다demo/demo.xml은 예제 모델의 데모 레코드입니다controllers/controllers.py는 일부 경로를 구현하는 컨트롤러의 예제입니다views/templates.xml은 컨트롤러 경로에서 사용하는 두 개의 예제 qweb 뷰입니다__manifest__.py는 모듈의 매니페스트로, 제목, 설명 및 로드할 데이터 파일이 포함되어 있습니다. 액세스 제어 목록 데이터 파일의 주석을 해제하세요:# 'security/ir.model.access.csv',
수동¶
모듈 구조를 수동으로 생성하려면Server framework 101튜토리얼을 따라 모듈의 구조와 각 파일의 내용을 이해하세요.
개발 브랜치에 푸시¶
다음을 실행하여 커밋할 변경 사항을 스테이징하세요:
git add my_module
다음을 실행하여 변경 사항을 커밋하세요:
git commit -m "My first module"다음을 실행하여 변경 사항을 원격 저장소에 푸시하세요:
실행:
git push -u origin feature-1
처음 푸시할 때만 `-u origin feature-1`을 지정하면 됩니다. 그 후에는 다음을 실행하세요:
git push
모듈 테스트¶
브랜치는브랜치 뷰탐색 패널의개발섹션에 나타납니다.
브랜치 이름을 클릭하여 방금 푸시한 변경 사항을 포함한 히스토리를 확인하세요. 데이터베이스가 준비되면연결을 클릭하여 액세스하세요.
Odoo.sh프로젝트가모듈을자동으로설치하도록구성된경우데이터베이스현황판에직접표시됩니다.그렇지않으면앱앱에서설치할수있습니다.
프로덕션 데이터로 테스트하기¶
참고
이단계에는프로덕션데이터베이스가필요합니다.아직없는경우생성하세요.
데모데이터를사용하여개발빌드에서모듈을테스트하고준비되었다고판단되면스테이징브랜치를사용하여프로덕션데이터로테스트할수있습니다.
다음을수행할수있습니다:
개발브랜치를스테이징섹션으로드래그앤드롭하여스테이징브랜치로변환합니다.
기존스테이징브랜치로드래그앤드롭하여병합합니다.
git merge명령을사용하여브랜치를병합합니다.
이렇게하면프로덕션데이터베이스를복제하고브랜치의최신변경사항으로업데이트된서버에서실행하는새스테이징빌드가생성됩니다.
데이터베이스가준비되면:guilabel:`연결`을클릭하여액세스합니다.
모듈설치¶
앱앱에서모듈을설치합니다.모듈이앱목록에직접표시되지않을수있으므로:ref:`개발자모드 <developer-mode>`를활성화하고:menuselection:`앱목록업데이트–>업데이트`를클릭하여앱목록을업데이트합니다.
참고
스테이징빌드의목적은프로덕션데이터베이스에서와동일하게변경사항의동작을테스트하는것이므로모듈이자동으로설치되지않습니다.따라서모듈이자동으로설치되는것을원하지않을것입니다.
프로덕션에 배포하기¶
스테이징브랜치에서프로덕션데이터로모듈을테스트하고프로덕션에사용할준비가되었다고판단되면다음을통해브랜치를프로덕션브랜치에병합할수있습니다:
스테이징브랜치를프로덕션브랜치로드래그앤드롭합니다.
git merge명령을사용하여브랜치를병합합니다.
이렇게하면스테이징브랜치의최신변경사항이프로덕션브랜치에병합되고프로덕션서버가업데이트됩니다.
데이터베이스가준비되면:guilabel:`연결`을클릭하여액세스합니다.
모듈설치¶
앱앱에서모듈을설치합니다.모듈이앱목록에직접표시되지않을수있으므로:ref:`개발자모드 <developer-mode>`를활성화하고:menuselection:`앱목록업데이트–>업데이트`를클릭하여앱목록을업데이트합니다.
변경 사항 추가하기¶
이섹션에서는모델에새필드를추가하고배포하여모듈에변경사항을추가하는방법을설명합니다.
편집기또는컴퓨터에서모듈폴더
~/src/odoo-addons/my_module`을연다음:file:`models/models.py파일을열어편집합니다.설명필드뒤에:description = fields.Text()
datetime 필드 추가:
start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
views/views.xml파일을 열고 다음 뒤에:<field name="value2"/>
추가:
<field name="start_datetime"/>
이러한 변경 사항은 테이블에 열을 추가하고 뷰를 수정하여 데이터베이스 구조를 변경합니다. 프로덕션 데이터베이스와 같은 기존 데이터베이스에 적용하려면 모듈을 업데이트해야 합니다. 변경 사항을 푸시할 때 Odoo.sh 플랫폼에서 자동으로 업데이트를 수행하도록 하려면
__manifest__.py를 열어 매니페스트의 모듈 버전을 증가시키고 다음을 교체하십시오:'version': '0.1',
다음으로:
'version': '0.2',
플랫폼은 버전 변경을 감지하고 새 리비전 배포 시 모듈 업데이트를 트리거합니다.
다음으로변경 사항을 푸시하십시오.
변경 사항을 테스트한 후 프로덕션 브랜치로 병합할 수 있습니다. 예를 들어 Odoo.sh 인터페이스에서 브랜치를 프로덕션 브랜치로 드래그 앤 드롭하십시오. 매니페스트에서 모듈 버전을 증가시켰으므로 플랫폼이 자동으로 모듈을 업데이트하고 새 필드를 즉시 사용할 수 있습니다. 그렇지 않으면 앱 목록에서 수동으로모듈을 업데이트할 수 있습니다.
외부 Python 라이브러리 사용¶
기본적으로 설치되지 않은 외부 Python 라이브러리를 사용하려면 모듈이 의존하는 외부 라이브러리를 나열하는requirements.txt파일을 정의할 수 있습니다. 플랫폼은 이 파일을 사용하여 프로젝트에 필요한 Python 라이브러리를 자동으로 설치합니다.
참고
Odoo.sh 데이터베이스에 시스템 패키지(예: apt 패키지)를 설치하거나 업그레이드할 수 없습니다. 그러나 특정 조건에서 `패키지를 설치할 수 있습니다<https://www.odoo.sh/faq#install_dependencies>`_. 이는 컴파일을 위해 시스템 패키지가 필요한 Python 모듈과 타사 Odoo 모듈에도 적용됩니다.
PostgreSQL 확장은 Odoo.sh에서 지원되지 않으므로 Odoo.sh 데이터베이스에 확장(예: PostGIS, ltree 등)을 설치할 수 없습니다.
예를 들어 모듈에서 `Unidecode 라이브러리<https://pypi.org/project/Unidecode>`_를 사용하려면:
저장소의 루트 폴더에
requirements.txt파일을 생성하십시오:Odoo.sh 편집기에서
~/src/user/requirements.txt파일을 생성하고 여십시오.컴퓨터에서
~/src/odoo-addons/requirements.txt파일을 생성하고 여십시오.
파일에 추가:
unidecode
이제 모듈에서 라이브러리를 사용할 수 있습니다. 예를 들어 모델의 이름 필드에서 문자의 악센트를 제거할 수 있습니다. 이렇게 하려면
models/models.py파일을 열고 다음 앞에:from odoo import models, fields, api
추가:
from unidecode import unidecode
다음 뒤:
start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
추가:
@api.model def create(self, values): if 'name' in values: values['name'] = unidecode(values['name']) return super(my_module, self).create(values) def write(self, values): if 'name' in values: values['name'] = unidecode(values['name']) return super(my_module, self).write(values)
모듈의 매니페스트
__manifest__.py를 편집하여 Python 종속성을 설치하도록 모듈 버전을 증가시키십시오.그런 다음변경 사항을 푸시하십시오.
팁
requirements.txt파일을git add requirements.txt명령으로 스테이징하세요.