Utwórz moduł¶
Przed utworzeniem pierwszego modułu konieczne jest utworzenie projektu Odoo.sh oraz poznanie adresu URL repozytorium GitHub.
Glosariusz
~/srcto katalog, w którym znajdują się repozytoria Git związane z Twoimi projektami Odoo.odooto użytkownik GitHub.odoo-addonsto repozytorium GitHub.feature-1to nazwa gałęzi deweloperskiej.mainto nazwa gałęzi produkcyjnej.my_moduleto nazwa modułu.
Zastąp je w razie potrzeby.
Utwórz gałąź deweloperską¶
Z widoku Gałęzie:
W panelu nawigacji gałęzi kliknij przycisk + (Nowa gałąź deweloperska) obok Development.
W sekcji Fork wybierz gałąź
main.W sekcji Do wprowadź
feature-1.
Gdy kompilacja będzie gotowa, możesz uzyskać dostęp do edytora i kodu swojej gałęzi deweloperskiej z folderu ~/src/user.
Sklonuj swoje repozytorium GitHub na swoim komputerze, uruchamiając następujące polecenia:
mkdir ~/src cd ~/src git clone https://github.com/odoo/odoo-addons.git cd ~/src/odoo-addons
Utwórz nową gałąź, uruchamiając:
git checkout -b feature-1 main
Utwórz strukturę modułu¶
Tworzenie szkieletu¶
Choć nie jest to wymagane, tworzenie szkieletu pozwala uniknąć żmudnego ręcznego konfigurowania podstawowej struktury modułu Odoo. Możesz utworzyć szkielet nowego modułu za pomocą pliku wykonywalnego odoo-bin.
Z terminala edytora uruchom:
odoo-bin scaffold my_module ~/src/user/
Po zainstalowaniu Odoo na swoim komputerze uruchom:
./odoo-bin scaffold my_module ~/src/odoo-addons/
Wskazówka
Jeśli nie chcesz instalować Odoo na swoim komputerze, możesz również pobrać ten szablon struktury modułu. Zastąp każde wystąpienie my_module wybraną nazwą.
Zostanie wygenerowana następująca struktura:
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
Ostrzeżenie
Podczas nadawania nazwy modułowi używaj tylko znaków alfanumerycznych (a-z, 0-9) lub podkreśleń (_), ponieważ nazwa jest używana w klasach Pythona, a nazwy klas zawierające znaki specjalne inne niż podkreślenia nie są prawidłowe w Pythonie.
Odkomentuj następujące pliki:
models/models.pyprzykład modelu z jego polamiviews/views.xmlwidok drzewa i widok formularza z menu je otwierającymidemo/demo.xmlrekordy demonstracyjne dla przykładowego modelucontrollers/controllers.pyprzykład kontrolera implementującego niektóre trasyviews/templates.xmldwa przykładowe widoki qweb używane przez trasy kontrolera__manifest__.pymanifest twojego modułu, zawierający jego tytuł, opis i pliki danych do załadowania. Odkomentuj plik danych listy kontroli dostępu:# 'security/ir.model.access.csv',
Ręcznie¶
Aby ręcznie utworzyć strukturę modułu, postępuj zgodnie z samouczkiem Server framework 101, aby zrozumieć strukturę modułu i zawartość każdego pliku.
Wypchnij na gałąź rozwojową¶
Przygotuj zmiany do zatwierdzenia, uruchamiając:
git add my_module
Zatwierdź swoje zmiany, uruchamiając:
git commit -m "My first module"Wypchnij swoje zmiany do zdalnego repozytorium, uruchamiając:
Z terminala edytora uruchom:
git push https HEAD:feature-1
Uruchom:
git push -u origin feature-1
Konieczne jest określenie
-u origin feature-1tylko przy pierwszym wypychaniu. Następnie uruchom:git push
Przetestuj moduł¶
Gałąź powinna pojawić się w sekcji Rozwój w panelu nawigacyjnym Widok gałęzi.
Kliknij nazwę gałęzi, aby wyświetlić jej historię, w tym zmiany, które właśnie wypchnąłeś. Gdy baza danych będzie gotowa, kliknij Połącz, aby uzyskać do niej dostęp.
Jeśli twój projekt Odoo.sh jest skonfigurowany do automatycznej instalacji modułu, pojawi się on bezpośrednio na konsoli bazy danych. W przeciwnym razie będzie dostępny do instalacji w aplikacji Aplikacje.
Testuj z danymi produkcyjnymi¶
Informacja
Do tego kroku wymagana jest produkcyjna baza danych. Jeśli jeszcze jej nie masz, utwórz ją.
Po przetestowaniu modułu w kompilacji rozwojowej z danymi demonstracyjnymi i uznaniu, że jest gotowy, możesz go przetestować z danymi produkcyjnymi, używając gałęzi przejściowej.
Możesz:
Przekonwertować swoją gałąź rozwojową na gałąź przejściową, przeciągając i upuszczając ją w sekcji Przejściowa.
Scalić ją z istniejącą gałęzią przejściową, przeciągając i upuszczając ją na tę gałąź.
Użyć polecenia
git merge, aby scalić swoje gałęzie.
To tworzy nową kompilację przejściową, która duplikuje produkcyjną bazę danych i uruchamia ją na serwerze zaktualizowanym o najnowsze zmiany z Twojej gałęzi.
Gdy baza danych będzie gotowa, kliknij Połącz, aby uzyskać do niej dostęp.
Zainstaluj moduł¶
Zainstaluj moduł z aplikacji Aplikacje. Ponieważ moduł może nie pojawić się bezpośrednio na liście aplikacji, zaktualizuj listę aplikacji, aktywując tryb programisty i klikając .
Informacja
Moduł nie jest instalowany automatycznie, ponieważ celem kompilacji przejściowej jest przetestowanie zachowania Twoich zmian tak, jak byłyby one w produkcyjnej bazie danych, więc nie chciałbyś, aby moduł był instalowany automatycznie.
Wdróż na produkcję¶
Po przetestowaniu modułu w gałęzi przejściowej z danymi produkcyjnymi i upewnieniu się, że jest gotowy do produkcji, możesz scalić swoją gałąź z gałęzią produkcyjną poprzez:
Przeciągnięcie i upuszczenie gałęzi przejściowej na gałąź produkcyjną.
Użycie polecenia
git merge, aby scalić swoje gałęzie.
To scala najnowsze zmiany z gałęzi przejściowej do gałęzi produkcyjnej i aktualizuje nimi serwer produkcyjny.
Gdy baza danych będzie gotowa, kliknij Połącz, aby uzyskać do niej dostęp.
Zainstaluj moduł¶
Zainstaluj moduł z aplikacji Aplikacje. Ponieważ moduł może nie pojawić się bezpośrednio na liście aplikacji, zaktualizuj listę aplikacji, aktywując tryb programisty i klikając .
Dodaj zmianę¶
Ta sekcja wyjaśnia, jak dodać zmianę w swoim module poprzez dodanie nowego pola w modelu i wdrożenie go.
Z edytora lub ze swojego komputera otwórz folder modułu
~/src/odoo-addons/my_module, a następnie otwórz plikmodels/models.py, aby go edytować. Po polu opisu:description = fields.Text()
dodaj pole daty i czasu:
start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
Otwórz plik
views/views.xmli po:<field name="value2"/>
dodaj:
<field name="start_datetime"/>
Te zmiany modyfikują strukturę bazy danych poprzez dodanie kolumny do tabeli i modyfikację widoku. Aby zastosować je do istniejącej bazy danych, takiej jak Twoja produkcyjna baza danych, te zmiany wymagają aktualizacji modułu. Jeśli chcesz, aby aktualizacja była wykonywana automatycznie przez platformę Odoo.sh po przesłaniu zmian, zwiększ wersję modułu w jego manifeście, otwierając
__manifest__.pyi zastępując:'version': '0.1',
z:
'version': '0.2',
Platforma wykryje zmianę wersji i wywoła aktualizację modułu po wdrożeniu nowej rewizji.
Następnie wypchnij zmiany.
Po przetestowaniu zmian możesz scalić je z gałęzią produkcyjną, na przykład przeciągając i upuszczając gałąź na gałąź produkcyjną w interfejsie Odoo.sh. Ponieważ zwiększyłeś wersję modułu w manifeście, platforma automatycznie zaktualizuje moduł, a nowe pole będzie natychmiast dostępne. W przeciwnym razie możesz ręcznie zaktualizować moduł z listy aplikacji.
Użycie zewnętrznej biblioteki Pythona¶
Jeśli chcesz użyć zewnętrznej biblioteki Pythona, która nie jest zainstalowana domyślnie, możesz zdefiniować plik requirements.txt, który zawiera listę bibliotek zewnętrznych, od których zależą Twoje moduły. Platforma użyje tego pliku do automatycznej instalacji bibliotek Pythona potrzebnych Twojemu projektowi.
Informacja
Nie jest możliwe instalowanie ani aktualizowanie pakietów systemowych w bazach danych Odoo.sh (np. pakietów apt). Jednak w określonych warunkach `pakiety mogą zostać rozważone do instalacji<https://www.odoo.sh/faq#install_dependencies>`_. Dotyczy to również modułów Pythona, które wymagają pakietów systemowych do kompilacji oraz modułów Odoo pochodzących od osób trzecich.
Rozszerzenia PostgreSQL nie są obsługiwane w Odoo.sh, dlatego nie jest możliwe instalowanie rozszerzeń (takich jak PostGIS, ltree, …) w bazach danych Odoo.sh.
Na przykład, aby użyć `biblioteki Unidecode<https://pypi.org/project/Unidecode>`_ w swoim module:
Utwórz plik
requirements.txtw katalogu głównym repozytorium:Z edytora Odoo.sh utwórz i otwórz plik
~/src/user/requirements.txt.Z komputera utwórz i otwórz plik
~/src/odoo-addons/requirements.txt.
Dodaj do pliku:
unidecode
Możesz teraz użyć biblioteki w swoim module, na przykład, aby usunąć akcenty ze znaków w polu nazwy swojego modelu. W tym celu otwórz plik
models/models.pyi przed:from odoo import models, fields, api
dodaj:
from unidecode import unidecode
Po:
start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
dodaj:
@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)
Zwiększ wersję modułu, aby zainstalować zależność Pythona, edytując manifest modułu
__manifest__.py.Następnie wypchnij zmiany.
Wskazówka
Dodaj plik
requirements.txtdo poczekalni, uruchamiającgit add requirements.txt.