첫 번째 모듈¶
입출고 현황¶
이 챕터를 첫 번째 Odoo 모듈을 생성하고 Odoo.sh 프로젝트에 배포하는 데 참고할 수 있습니다
이 튜토리얼을 진행하려면 Odoo.sh에서 프로젝트 생성 후 Github 저장소의 URL을 알고 있어야 합니다.
Git과 Github에 대한 기본적인 사용법을 설명합니다.
다음과 같이 가정합니다.
~/src 는 Odoo 프로젝트와 관련된 Git 저장소가 있는 디렉토리입니다.
odoo 는 Github 사용자입니다.
odoo-addons 는 Github 저장소입니다.
feature-1 은 개발 브랜치의 이름입니다.
master 는 프로덕션 브랜치의 이름입니다.
my_module 은 모듈의 이름입니다.
이 내용을 원하는 값으로 교체합니다.
개발 브랜치 만들기¶
Odoo.sh 에서¶
브랜치 보기에서:
개발 단계 옆에 있는
+
버튼을 클릭하고,Fork 선택 항목에 master 브랜치를 선택하고,
대상 입력란에 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 master
모듈 구조 생성하기¶
모듈 스캐폴딩하기¶
반드시 필요한 것은 아니지만, 스캐폴딩을 사용하면 기본 Odoo 모듈 구조를 설정해야 하는 번거로움을 피할 수 있습니다. odoo-bin 실행 파일로 새 모듈을 스캐폴딩할 수 있습니다.
단말기의 Odoo.sh 편집기에서:
$ odoo-bin scaffold my_module ~/src/user/
또는 컴퓨터에서 Odoo 설치 가 되어있는 경우:
$ ./odoo-bin scaffold my_module ~/src/odoo-addons/
컴퓨터에 Odoo를 설치하는 것이 번거로울 경우에는 이 모듈 구조 템플릿 다운로드
를 통해 내_모듈 에 있는 모든 항목을 원하는 이름으로 교체할 수도 있습니다.
아래와 같이 구조가 생성됩니다:
my_module
├── __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
경고
모듈 이름에는 밑줄 ( _ ) 이외의 특수 문자를 사용하지 않으며 하이픈 ( - )도 사용하지 않습니다. 이 이름은 모듈의 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',
수동¶
If you want to create your module structure manually, you can follow the Getting started tutorial to understand the structure of a module and the content of each file.
개발 브랜치 푸시하기¶
커밋 변경 사항에 대한 스테이징
$ git add my_module
변경 사항 커밋하기
$ git commit -m "My first module"
변경 사항을 원격 저장소에 푸시하기
Odoo.sh 편집기 단말기에서:
$ git push https HEAD:feature-1
위의 명령어는 온라인 편집기 편에 있는 변경 사항 커밋 및 푸시 섹션에 설명되어 있습니다. 여기에는 사용자 이름과 비밀번호를 입력하라는 메시지가 표시된다는 사실과 2단계 인증을 사용할 경우 수행해야 하는 작업에 대한 설명이 포함되어 있습니다.
또는 컴퓨터 단말기에서:
$ git push -u origin feature-1
첫 번째 푸시에만 -u Origin feature-1 을 지정하면 됩니다. 그 이후는 컴퓨터에서 향후 변경 사항을 푸시하려면 다음의 내용만 진행하면 됩니다.
$ git push
모듈 테스트하기¶
프로젝트의 개발 브랜치에 해당 브랜치가 나타나게 됩니다.
프로젝트의 브랜치 보기에서 왼쪽 탐색 패널에 있는 브랜치 이름을 클릭하면 해당 이력을 확인할 수 있습니다.
방금 푸시한 변경 사항과 함께 설정한 댓글 내용을 여기에서 볼 수 있습니다. 데이터베이스가 준비되면 연결 버튼을 클릭하여 액세스할 수 있습니다.
Odoo.sh 프로젝트가 모듈을 자동으로 설치하도록 설정되어 있는 경우 데이터베이스 앱에서 직접 볼 수 있습니다. 그렇지 않은 경우에는 앱을 설치하여 사용할 수 있습니다.
그런 다음 모듈을 구동해 보고, 새 레코드를 만들며, 기능과 버튼을 테스트할 수 있습니다.
프로덕션 데이터로 테스트하기¶
이 단계에서는 프로덕션 데이터베이스가 있어야 합니다. 아직 없는 경우 생성하면 됩니다.
데모 데이터를 사용하여 개발 빌드에서 모듈을 테스트한 후 준비가 완료되면 스테이징 브랜치를 사용하여 프로덕션 데이터로 테스트할 수 있습니다.
사용 가능한 옵션:
개발 브랜치를 스테이징 섹션 제목으로 끌어다 놓아서 스테이징 브랜치를 만듭니다.
기존 스테이징 브랜치에 끌어다 놓아서 해당하는 스테이징 브랜치에 병합합니다.
git merge
명령어를 사용하여 브랜치를 병합할 수도 있습니다.
그러면 새로운 스테이징 빌드가 생성되어 프로덕션 데이터베이스를 복제하고 최신 변경 브랜치로 업데이트된 서버를 사용하여 실행됩니다.
데이터베이스가 준비되면 연결 버튼을 사용하여 데이터베이스에 액세스할 수 있습니다.
모듈 설치하기¶
모듈은 자동으로 설치되지 않으며 앱 메뉴를 통해 직접 설치해야 합니다. 실제로 스테이징 빌드의 목적은 변경 사항이 프로덕션에서 작동하는지 테스트하는 것이므로, 프로덕션에서 모듈이 자동으로 설치되지 않고 요청에 따라 설치되는 것이 더 바람직할 것입니다.
모듈이 설치할 앱에 직접 표시되지 않을 수도 있으므로 먼저 앱 목록을 업데이트해야 합니다.
개발자 모드 활성화하기
앱 메뉴에서 앱 목록 업데이트 버튼을 클릭합니다.
대화창이 나타나면 업데이트 버튼을 클릭합니다.
그러면 사용할 수 있는 앱 목록에 모듈이 표시됩니다.
프로덕션에 배포하기¶
프로덕션 데이터를 사용하여 스테이징 브랜치에서 모듈을 테스트한 후 프로덕션 준비가 완료되면 프로덕션 브랜치에서 브랜치를 병합할 수 있습니다.
스테이징 브랜치를 프로덕션 브랜치로 끌어다 놓습니다.
git merge
명령어를 사용하여 브랜치를 병합할 수도 있습니다.
이렇게 하면 스테이징 브랜치의 최신 변경 사항이 프로덕션 브랜치로 병합되고 이와 같은 최신 변경 사항으로 프로덕션 서버가 업데이트됩니다.
데이터베이스가 준비되면 연결 버튼을 사용하여 데이터베이스에 액세스할 수 있습니다.
모듈 설치하기¶
모듈은 자동으로 설치되지 않으며, 위의 섹션에서 스테이징 데이터베이스에 모듈을 설치하는 방법 에서 설명된 대로 수동으로 설치해야 합니다.
변경 사항 추가하기¶
이 섹션에서는 모델에 새 필드를 추가하여 모듈에 변경 사항을 추가하고 배포하는 방법에 대해서 설명합니다.
- Odoo.sh 편집기에서,
~/src/user/my_module 모듈 폴더를 찾아서,
다음으로 models/models.py 파일을 엽니다.
- 또는 컴퓨터에서,
원하는 파일 브라우저를 사용하여 모듈 폴더 ~/src/odoo-addons/my_module 을 찾습니다.
그런 다음 Atom, Sublime Text, PyCharm, vim 등과 같은 편집기 중에서 원하는 편집기로 models/models.py 파일을 엽니다.
그런 다음 설명 필드 뒤에
description = fields.Text()
일시 필드를 추가하고
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',
플랫폼에서 버전이 변경된 것을 인식하고 새로운 버전을 배포할 때 모듈 업데이트가 진행되도록 합니다.
Git 폴더로 이동합니다.
그런 다음 Odoo.sh 터미널에서:
$ cd ~/src/user/
또는 컴퓨터 단말기에서:
$ cd ~/src/odoo-addons/
그런 다음 커밋할 변경에 대해 스테이징을 진행합니다.
$ git add my_module
변경 사항 커밋하기
$ git commit -m "[ADD] my_module: add the start_datetime field to the model my_module.my_module"
변경 사항을 푸시합니다:
Odoo.sh 터미널에서:
$ git push https HEAD:feature-1
또는 컴퓨터 단말기에서:
$ git push
그러면 플랫폼에서 feature-1 브랜치에 대해 새 빌드를 생성합니다.
변경 사항을 테스트한 후에는 브랜치를 Odoo.sh 인터페이스의 프로덕션 브랜치로 끌어서 놓아 프로덕션 브랜치의 변경 사항을 병합할 수 있습니다. 매니페스트에서 모듈 버전을 늘리면 플랫폼이 자동으로 모듈 업데이트를 하여 새 필드를 직접 사용할 수 있습니다. 그렇지 않으면 앱 목록 내에서 모듈을 수동으로 업데이트할 수 있습니다.
외부 Python 라이브러리 사용¶
기본 설치되지 않는 외부 Python 라이브러리를 사용하려면 모듈이 의존하는 외부 라이브러리를 requirements.txt 파일에 기재하여 지정할 수 있습니다.
참고
Odoo.sh 데이터베이스에 sms 시스템 패키지를 설치하거나 업그레이드할 수 없습니다 (예: apt 패키지). 그러나 특정 조건에서는 패키지 설치를 고려할 수 있습니다. 이는 컴파일을 할 때 시스템 패키지가 필요한 Python 모듈 과 타사 Odoo 모듈 에도 적용됩니다.
Odoo.sh에서 PostgreSQL 확장 은 지원되지 않습니다.
자세한 내용은 FAQ 를 참조하세요.
플랫폼에서는 이 파일을 사용하여 프로젝트에 필요한 Python 라이브러리를 자동으로 설치합니다.
이 섹션에서는 모듈에 있는 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)
Python 종속성을 추가하려면 플랫폼에서 이를 설치하기 위해 모듈 버전을 높여야 합니다.
모듈 매니페스트 __manifest__.py 편집하기
대체
'version': '0.2',
조회
'version': '0.3',
변경 사항에 대한 스테이징과 커밋을 실행합니다.
$ git add requirements.txt
$ git add my_module
$ git commit -m "[IMP] my_module: automatically remove special chars in my_module.my_module name field"
그런 다음 변경 사항을 푸시합니다:
Odoo.sh 터미널:
$ git push https HEAD:feature-1
컴퓨터 터미널:
$ git push