모듈 생성

첫 번째 모듈을 생성하기 전에Odoo.sh 프로젝트를 생성하고 GitHub 저장소의 URL을 알아야 합니다.

용어집

  • ~/src는 Odoo 프로젝트와 관련된 Git 저장소가 위치한 디렉터리입니다.

  • odoo는 GitHub 사용자입니다.

  • odoo-addons는 GitHub 저장소입니다.

  • feature-1은 개발 브랜치의 이름입니다.

  • main은 프로덕션 브랜치의 이름입니다.

  • my_module은 모듈의 이름입니다.

필요에 따라 이를 변경하십시오.

개발 브랜치 만들기

:doc:`Branches 뷰 <getting_started/branches>`에서:

  • 브랜치 탐색 패널에서Development옆의 +(New development branch) 버튼을 클릭합니다.

  • Fork에서 main 브랜치를 선택합니다.

  • To`feature-1`을 입력합니다.

Odoo.sh에서 개발 브랜치를 생성하기 위해 프로덕션 브랜치 포킹

빌드가 준비되면에디터~/src/user 폴더에서 개발 브랜치의 코드에 액세스할 수 있습니다.

모듈 구조 생성하기

스캐폴딩

필수는 아니지만 스캐폴딩은 기본 Odoo 모듈 구조를 설정하는 번거로움을 피할 수 있습니다. odoo-bin 실행 파일을 사용하여 새 모듈을 스캐폴딩할 수 있습니다.

에디터터미널에서 다음을 실행합니다:

odoo-bin scaffold my_module ~/src/user/

컴퓨터에 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튜토리얼을 따라 모듈의 구조와 각 파일의 내용을 이해하세요.

개발 브랜치에 푸시

  1. 다음을 실행하여 커밋할 변경 사항을 스테이징하세요:

    git add my_module
    
  2. 다음을 실행하여 변경 사항을 커밋하세요:

    git commit -m "My first module"
    
  3. 다음을 실행하여 원격 저장소에 변경 사항을 푸시하세요:

    에디터터미널에서 다음을 실행합니다:

    git push https HEAD:feature-1
    

모듈 테스트

브랜치는브랜치 뷰탐색 패널의개발섹션에 나타나야 합니다.

개발 브랜치 예시

브랜치 이름을 클릭하여 방금 푸시한 변경 사항을 포함한 히스토리를 확인하세요. 데이터베이스가 준비되면연결을 클릭하여 액세스하세요.

데이터베이스에 액세스하기 위한 연결 버튼

Odoo.sh 프로젝트가 모듈을 자동으로 설치하도록 구성된 경우 데이터베이스 현황판에 직접 표시됩니다. 그렇지 않으면앱에서 설치할 수 있습니다.

데이터베이스 현황판의 새 모듈

프로덕션 데이터로 테스트하기

참고

이 단계에는 프로덕션 데이터베이스가 필요합니다. 아직 없다면 생성하세요.

데모 데이터가 있는 개발 빌드에서 모듈을 테스트하고 준비가 되었다고 판단되면 스테이징 브랜치를 사용하여 프로덕션 데이터로 테스트할 수 있습니다.

다음을 수행할 수 있습니다:

  • 개발 브랜치를스테이징섹션으로 드래그 앤 드롭하여 스테이징 브랜치로 변환합니다.

  • 기존 스테이징 브랜치로 드래그 앤 드롭하여 해당 브랜치에 병합합니다.

  • git merge명령을 사용하여 브랜치를 병합합니다.

이렇게 하면 프로덕션 데이터베이스를 복제하고 브랜치의 최신 변경 사항으로 업데이트된 서버에서 실행하는 새 스테이징 빌드가 생성됩니다.

데이터베이스가 준비되면연결을 클릭하여 액세스합니다.

모듈 설치

앱에서 모듈을 설치합니다. 모듈이 앱 목록에 직접 표시되지 않을 수 있으므로개발자 모드를 활성화하고앱 목록 업데이트 ‣ 업데이트를 클릭하여 앱 목록을 업데이트합니다.

참고

스테이징 빌드의 목적은 프로덕션 데이터베이스에서와 같이 변경 사항의 동작을 테스트하는 것이므로 모듈이 자동으로 설치되지 않으며, 모듈이 자동으로 설치되는 것을 원하지 않을 것입니다.

프로덕션에 배포하기

프로덕션 데이터로 스테이징 브랜치에서 모듈을 테스트하고 프로덕션에 사용할 준비가 되었다고 판단되면 다음 방법으로 브랜치를 프로덕션 브랜치에 병합할 수 있습니다:

  • 스테이징 브랜치를 프로덕션 브랜치로 드래그 앤 드롭합니다.

  • git merge명령을 사용하여 브랜치를 병합합니다.

이렇게 하면 스테이징 브랜치의 최신 변경 사항이 프로덕션 브랜치에 병합되고 프로덕션 서버가 변경 사항으로 업데이트됩니다.

데이터베이스가 준비되면연결을 클릭하여 액세스합니다.

모듈 설치

앱에서 모듈을 설치합니다. 모듈이 앱 목록에 직접 표시되지 않을 수 있으므로개발자 모드를 활성화하고앱 목록 업데이트 ‣ 업데이트를 클릭하여 앱 목록을 업데이트합니다.

변경 사항 추가하기

이 섹션에서는 모델에 새 필드를 추가하고 배포하여 모듈에 변경 사항을 추가하는 방법을 설명합니다.

  1. 편집기또는 컴퓨터에서 모듈 폴더~/src/odoo-addons/my_module을 열고models/models.py파일을 열어 편집합니다. description 필드 뒤에:

    description = fields.Text()
    

    datetime 필드를 추가합니다:

    start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
    
  2. views/views.xml파일을 열고 다음 뒤에:

    <field name="value2"/>
    

    다음을 추가합니다:

    <field name="start_datetime"/>
    
  3. 이러한 변경 사항은 테이블에 열을 추가하고 뷰를 수정하여 데이터베이스 구조를 변경합니다. 프로덕션 데이터베이스와 같은 기존 데이터베이스에 적용하려면 이러한 변경 사항은 모듈을 업데이트해야 합니다. 변경 사항을 푸시할 때 Odoo.sh 플랫폼에서 업데이트를 자동으로 수행하도록 하려면__manifest__.py를 열고 다음을 교체하여 매니페스트에서 모듈 버전을 높입니다:

    'version': '0.1',
    

    다음과 함께:

    'version': '0.2',
    

    플랫폼은 버전 변경을 감지하고 새 개정판이 배포되면 모듈 업데이트를 트리거합니다.

  4. 다음으로변경 사항을 푸시합니다.

  5. 변경 사항을 테스트한 후 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>`_를 사용하려면:

  1. 리포지토리의 루트 폴더에requirements.txt파일을 생성합니다:

    • Odoo.sh 편집기에서~/src/user/requirements.txt파일을 생성하고 엽니다.

    • 컴퓨터에서~/src/odoo-addons/requirements.txt파일을 생성하고 엽니다.

  2. 파일에 다음을 추가합니다:

    unidecode
    
  3. 이제 모듈에서 라이브러리를 사용할 수 있습니다. 예를 들어 모델의 이름 필드에서 문자의 악센트를 제거할 수 있습니다. 이렇게 하려면models/models.py파일을 열고 다음 코드 이전에:

    from odoo import models, fields, api
    

    다음을 추가합니다:

    from unidecode import unidecode
    
  4. 다음 코드 이후:

    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)
    
  5. 모듈의 매니페스트__manifest__.py를 편집하여 모듈 버전을 증가시켜 Python 종속성을 설치합니다.

  6. 그런 다음변경 사항을 푸시합니다.

    git add requirements.txt`를 실행하여:file:`requirements.txt파일을 스테이징합니다.