Primul dvs. modul

Prezentare generală

Acest capitol vă ajută să creați primul modul Odoo și să-l implementați în proiectul dvs. Odoo.sh.

Acest tutorial necesită: ref: ați creat un proiect pe Odoo.sh <odoosh-gettingstarted-create>, și știți URL-ul depozitului dvs. Github.

Se explică utilizarea de bază a Git și Github.

Se fac următoarele presupuneri:

  • ~/src este directorul unde se află depozitele Git legate de proiectele Odoo dvs.,

  • odoo este utilizatorul Github,

  • odoo-addons este depozitul Github,

  • feature-1 este numele unei ramuri de dezvoltare,

  • master este numele ramurii de producție,

  • my_module este numele modulului.

*Înlocuiți aceste valori cu ale dvs. alegere.

Creați ramura de dezvoltare

De la Odoo.sh

În vizualizarea ramurilor:

  • apăsați butonul + lângă stadiul de dezvoltare,

  • alegeți ramura master în selecția Fork,

  • tastați feature-1 în intrarea To.

    pic1 pic2

Odată ce s-a creat compilarea, puteți accesa editorul și navigați până la directorul ~/src/user pentru a accesa codul ramurii de dezvoltare.

../../../_images/firstmodule-development-editor.png ../../../_images/firstmodule-development-editor-interface.png

De pe calculatorul dvs.

Clonați depozitul dvs. Github pe calculatorul dvs.:

$ mkdir ~/src
$ cd ~/src
$ git clone https://github.com/odoo/odoo-addons.git
$ cd ~/src/odoo-addons

Creați o nouă ramură:

$ git checkout -b feature-1 master

Creați structura modulului

Scaffoldarea modulului

În timp ce nu este necesar, scaffoldarea evită monotonia de a seta structura de bază a modulului Odoo. Puteți scaffolda un nou modul utilizând executabilul odoo-bin.

Din editorul Odoo.sh, într-un terminal:

$ odoo-bin scaffold my_module ~/src/user/

Or, from your computer, if you have an installation of Odoo:

$ ./odoo-bin scaffold my_module ~/src/odoo-addons/

Dacă nu doriți să vă deranjați să instalați Odoo pe calculatorul dvs., puteți de asemenea descărcați acest șablon de structură de modul în care înlocuiți toate aparițiile de my_module cu numele ales de dvs.

Structura de mai jos va fi generată:

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

Atenționare

Nu utilizați caractere speciale în afară de subliniere ( _ ) pentru numele modulului dvs., nici chiar un hifen ( - ). Acest nume este utilizat pentru clasele Python ale modulului dvs., și având nume de clase cu caractere speciale în afară de subliniere nu este valid în Python.

Dezactivați conținutul fișierelor:

  • models/models.py, un exemplu de model cu câmpurile sale,

  • views/views.xml, o vizualizare a arborelui și a formei, cu meniurile care le deschid,

  • demo/demo.xml, înregistrări demo pentru modelul de exemplu de mai sus,

  • controllers/controllers.py, un exemplu de controler care implementează anumite rute,

  • views/templates.xml, două exemple de vizualizări qweb utilizate de rutele controlerului de mai sus,

  • __manifest__.py, manifestul modulului dvs., inclusiv, de exemplu, titlul, descrierea și fișierele de date de încărcare. Trebuie doar să dezactivați fișierul de date al listei de control de acces:

    # 'security/ir.model.access.csv',
    

Manual

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.

Push branch-ul de dezvoltare

Stabilirea modificărilor pentru a fi comise

$ git add my_module

Comiteți modificările

$ git commit -m "My first module"

Push modificările la depozitul dvs. remote

Dintr-un terminal editor Odoo.sh:

$ git push https HEAD:feature-1

Comanda de mai sus este explicată în secțiunea Commit & Push your changes din capitolul Online Editor. Include explicația cu privire la faptul că veți fi solicitat să introduceți numele de utilizator și parola și ce să faceți dacă utilizați autentificarea cu doi factori.

Sau, din terminalul computerului dvs.:

$ git push -u origin feature-1

Aveți nevoie să specificați -u origin feature-1 pentru prima dată. De la acel moment, pentru a trimite viitoarele modificări de pe computer, puteți folosi simplu

$ git push

Testați modulul dvs.

Branch-ul dvs. ar trebui să apară în branch-urile de dezvoltare ale proiectului dvs.

../../../_images/firstmodule-test-branch.png

În vizualizarea branch-urilor proiectului dvs., puteți face clic pe numele branch-ului dvs. în panoul de navigare din stânga pentru a accesa istoricul.

../../../_images/firstmodule-test-branch-history.png

Aici puteți vedea modificările pe care tocmai le-ați trimis, inclusiv comentariul pe care l-ați setat. Odată ce baza de date este gata, puteți accesa-o făcând clic pe butonul Conectați.

../../../_images/firstmodule-test-database.png

Dacă proiectul dvs. Odoo.sh este configurat pentru a instala modulul dvs. automat, veți vedea direct în lista aplicațiilor bazei de date. În caz contrar, va fi disponibil în lista aplicațiilor de instalat.

Apoi puteți juca cu modulul dvs., crea înregistrări noi și testați funcțiile și butoanele dvs.

Testați cu datele de producție

Aveți nevoie de o bază de date de producție pentru această etapă. Puteți crea o bază de date de producție dacă nu o aveți deja.

Odată ce ați testat modulul dvs. într-o versiune de dezvoltare cu datele demo și credeți că este gata, puteți să-l testați cu datele de producție folosind un branch de stagiu.

Puteți face fie:

  • Faceți branch-ul dvs. de dezvoltare un branch de stagiu, trăgând și fixându-l pe titlul secțiunii staging.

    ../../../_images/firstmodule-test-devtostaging.png
  • Îl combinați într-un branch de stagiu existent, trăgând și fixându-l pe branch-ul de stagiu dat.

    ../../../_images/firstmodule-test-devinstaging.png

Puteți folosi și comanda git merge pentru a combina branch-urile.

Aceasta va crea o nouă versiune de stagiu, care va duplica baza de date de producție și va face ca ea să ruleze folosind un server actualizat cu ultimele modificări ale branch-ului dvs.

../../../_images/firstmodule-test-mergedinstaging.png

Odată ce baza de date este gata, puteți să vă conectați la ea folosind butonul Connect.

Instalați modulul dvs.

Modulul dvs. nu va fi instalat automat, trebuie să-l instalați din meniul aplicațiilor. Într-adevăr, scopul versiunii de stagiu este de a testa comportamentul modificărilor dvs. așa cum ar fi în producție, iar în producție nu vă place să instalați modulul dvs. automat, ci la cerere.

Modulul dvs. nu poate apărea direct în aplicațiile dvs. de instalat, trebuie mai întâi să actualizați lista dvs. de aplicații:

  • Activați modulul de dezvoltare

  • în meniul aplicațiilor, faceți clic pe butonul Update Apps List,

  • în dialogul care apare, faceți clic pe butonul Update.

    ../../../_images/firstmodule-test-updateappslist.png

Modulul dvs. va apărea apoi în lista de aplicații disponibile.

../../../_images/firstmodule-test-mymoduleinapps.png

Instalați în producție

Odată ce ați testat modulul dvs. într-un branch de stagiu cu datele dvs. de producție și credeți că este gata pentru producție, puteți combina branch-ul dvs. în branch-ul de producție.

Trageți și plasați branch-ul dvs. de stagiu pe branch-ul de producție.

../../../_images/firstmodule-test-mergeinproduction.png

Puteți folosi și comanda git merge pentru a combina branch-urile.

Aceasta va combina ultimele modificări ale branch-ului dvs. de stagiu în branch-ul de producție și va actualiza serverul dvs. de producție cu aceste ultime modificări.

../../../_images/firstmodule-test-mergedinproduction.png

Odată ce baza de date este gata, puteți să vă conectați la ea folosind butonul Connect.

Instalați modulul dvs.

Modulul dvs. nu va fi instalat automat, trebuie să-l instalați manual, așa cum este explicat în secțiunea despre instalarea modulului dvs. în bazele de date de stagiu.

Adăugați o modificare

Această secțiune explică cum să adăugați o modificare în modulul dvs. prin adaugarea unui câmp nou într-un model și să-l instalați.

Din editorul Odoo.sh,
  • navigați către folderul modulului dvs. ~/src/user/my_module,

  • apoi, deschideți fișierul models/models.py.

Sau, de pe calculatorul dvs.,
  • folosiți browserul de fișiere ales pentru a naviga către folderul modulului dvs. ~/src/odoo-addons/my_module,

  • apoi, deschideți fișierul models/models.py folosind editorul ales, cum ar fi Atom, Sublime Text, PyCharm, vim, …

După câmpul de descriere

description = fields.Text()

Adăugați un câmp de dată

start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())

Apoi, deschideți fișierul views/views.xml.

După

<field name="value2"/>

Adaugă

<field name="start_datetime"/>

Aceste modificări alterează structura bazei de date prin adăugarea unei coloane într-o tabelă și modificarea unei vizualizări stocate în baza de date.

Pentru a fi aplicate în bazele de date existente, cum ar fi baza de date de producție, aceste modificări necesită actualizarea modulului.

Dacă doriți ca actualizarea să fie efectuată automat de platforma Odoo.sh când trimiteți modificările, creșteți versiunea modulului în manifestul său.

Deschideți manifestul modulului __manifest__.py.

Înlocuire

'version': '0.1',

cu

'version': '0.2',

Platforma va detecta schimbarea versiunii și va declanșa actualizarea modulului la deploiementul noii revizii.

Navigați către folderul Git.

Apoi, dintr-un terminal Odoo.sh:

$ cd ~/src/user/

Sau, din terminalul computerului dvs.:

$ cd ~/src/odoo-addons/

Apoi, adăugați modificările pentru a fi comise

$ git add my_module

Comiteți modificările

$ git commit -m "[ADD] my_module: add the start_datetime field to the model my_module.my_module"

Trimiteți modificările:

Dintr-un terminal Odoo.sh:

$ git push https HEAD:feature-1

Sau, din terminalul computerului dvs.:

$ git push

Platforma va crea apoi o nouă versiune pentru branch-ul feature-1.

../../../_images/firstmodule-test-addachange-build.png

Odată ce ați testat modificările, puteți combina modificările în branch-ul de producție, de exemplu prin trage și fixează branch-ul pe branch-ul de producție în interfața Odoo.sh. Deoarece ați crescut versiunea modulului în manifest, platforma va actualiza modulul automat și câmpul nou va fi direct disponibil. În caz contrar, puteți actualiza manual modulul din lista aplicațiilor.

Utilizați o bibliotecă Python externă

Dacă doriți să utilizați o bibliotecă Python externă care nu este instalată în mod implicit, puteți defini un fișier requirements.txt care listează bibliotecile externe de care depind modulele dvs.

Notă

  • Nu este posibil să instalați sau să actualizați pachetele de sistem pe o bază de date Odoo.sh (de exemplu, pachete apt). Cu toate acestea, în anumite condiții, pot fi luate în considerare pachetele pentru instalare. Acest lucru se aplică și modulelor Python care necesită pachete de sistem pentru compilarea lor și modulelor Odoo de terțe părți.

  • Extensiile PostgreSQL nu sunt acceptate pe Odoo.sh.

  • Pentru mai multe informații, consultați `FAQ-ul

Platforma va utiliza acest fișier pentru a instala automat bibliotecile Python pe care proiectul dvs. le necesită.

Funcția este explicată în această secțiune prin utilizarea bibliotecii Unidecode în modulul dvs.

Creați un fișier requirements.txt în directorul rădăcină al depozitului dvs.

În editorul Odoo.sh, creați și deschideți fișierul ~/src/user/requirements.txt.

De asemenea, de pe calculatorul dvs., creați și deschideți fișierul ~/src/odoo-addons/requirements.txt.

Adaugă

unidecode

Apoi utilizați biblioteca în modulul dvs., de exemplu pentru a elimina accentele din caracterele din câmpul nume al modelului dvs.

Deschideți fișierul models/models.py.

Înainte

from odoo import models, fields, api

Adaugă

from unidecode import unidecode

După

start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())

Adaugă

@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)

Adăugarea unei dependențe Python necesită o creștere a versiunii modulului pentru ca platforma să o instaleze.

Editați manifestul modulului __manifest__.py

Înlocuire

'version': '0.2',

cu

'version': '0.3',

Stabilirea și comiterea modificărilor dvs.:

$ 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"

Apoi, trimiteți modificările dvs.:

Intr-un terminal Odoo.sh:

$ git push https HEAD:feature-1

In terminalul calculatorului dvs.:

$ git push