Maak een module¶
Voordat je je eerste module maakt, is het noodzakelijk om een Odoo.sh-project te maken en de URL van je GitHub-repository te kennen.
Woordenlijst
~/srcis de map waar de Git-repositories met betrekking tot je Odoo-projecten zich bevinden.odoois de GitHub-gebruiker.odoo-addonsis de GitHub-repository.feature-1is de naam van een ontwikkelingstak.mainis de naam van de productietak.my_moduleis de naam van de module.
Vervang deze indien nodig.
Maak de ontwikkelingstak¶
Vanuit de Filialen-weergave:
Klik in het navigatiepaneel voor takken op de + (Nieuwe ontwikkelingstak)-knop naast Ontwikkeling.
Selecteer onder Fork de
main-tak.Voer onder Naar
feature-1in.
Zodra de build klaar is, heb je toegang tot de editor en de code van je ontwikkelingstak vanuit de map ~/src/user.
Kloon je GitHub-repository op je computer door de volgende commando’s uit te voeren:
mkdir ~/src cd ~/src git clone https://github.com/odoo/odoo-addons.git cd ~/src/odoo-addons
Maak een nieuwe tak aan door uit te voeren:
git checkout -b feature-1 main
Maak de modulestructuur¶
Scaffolding¶
Hoewel het niet verplicht is, bespaart scaffolding het vervelende werk van het opzetten van de basis Odoo-modulestructuur. Je kunt een nieuwe module scaffolden met het odoo-bin executable.
Voer vanuit de editor-terminal uit:
odoo-bin scaffold my_module ~/src/user/
Voer met Odoo geïnstalleerd op je computer uit:
./odoo-bin scaffold my_module ~/src/odoo-addons/
Tip
Dit sjabloon voor de module-structuur downloaden. Vervang elk voorkomen van my_module door de naam van jouw keuze.
De onderstaande structuur wordt gegenereerd:
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
Waarschuwing
Gebruik alleen alfanumerieke tekens (a-z, 0-9) of underscores (_) bij het benoemen van je module, aangezien de naam wordt gebruikt voor Python-klassen en klassenamen met andere speciale tekens dan underscores niet geldig zijn in Python.
Verwijder de commentaartekens van de volgende bestanden:
models/models.pyeen voorbeeld van een model met zijn veldenviews/views.xmleen boom- en formulierweergave, met de menu’s die ze openendemo/demo.xmldemorecords voor het voorbeeldmodelcontrollers/controllers.pyeen voorbeeld van een controller die enkele routes implementeertviews/templates.xmltwee voorbeeld-qweb-weergaven die gebruikt worden door de controller-routes__manifest__.pyhet manifest van je module, inclusief de titel, beschrijving en te laden databestanden. Verwijder de commentaartekens van het databestand voor de toegangscontrolelijst:# 'security/ir.model.access.csv',
Handmatig¶
Volg de Server framework 101-tutorial om de structuur van een module en de inhoud van elk bestand te begrijpen om je module-structuur handmatig te maken.
Push naar de ontwikkelingstak¶
Zet de wijzigingen klaar om te committen door het volgende uit te voeren:
git add my_module
Commit je wijzigingen door het volgende uit te voeren:
git commit -m "My first module"Push je wijzigingen naar je externe repository door het volgende uit te voeren:
Voer vanuit de editor-terminal uit:
git push https HEAD:feature-1
Voer uit:
git push -u origin feature-1
Het is alleen de eerste keer dat je pusht noodzakelijk om
-u origin feature-1op te geven. Daarna voer je uit:git push
Test de module¶
De tak zou moeten verschijnen onder het gedeelte Development van het navigatiepaneel Filialen-weergave.
Klik op de branchnaam om de geschiedenis te bekijken, inclusief de wijzigingen die je zojuist hebt gepusht. Zodra de database klaar is, klik je op Verbinden om er toegang toe te krijgen.
Als je Odoo.sh-project is geconfigureerd om de module automatisch te installeren, verschijnt deze direct op het databasedashboard. Anders is deze beschikbaar voor installatie onder de app Apps.
Test met de productiegegevens¶
Notitie
Voor deze stap is een productiedatabase vereist. Als je er nog geen hebt, maak er dan een aan.
Zodra je de module hebt getest in een development build met de demodata en denkt dat deze klaar is, kun je deze testen met de productiedata via een staging branch.
Je kunt:
Je development branch converteren naar een staging branch door deze naar de sectie Staging te slepen.
Deze samenvoegen met een bestaande staging branch door deze op die branch te slepen.
Gebruik het commando
git mergeom je branches samen te voegen.
Dit creëert een nieuwe staging build die de productiedatabase dupliceert en deze draait op een server die is bijgewerkt met de laatste wijzigingen van je branch.
Zodra de database klaar is, klik je op Verbinden om er toegang toe te krijgen.
Installeer de module¶
Installeer de module vanuit de app Apps. Omdat de module mogelijk niet direct in de lijst met apps verschijnt, werk je de lijst met apps bij door de ontwikkelaarsmodus te activeren en op te klikken.
Notitie
De module wordt niet automatisch geïnstalleerd, omdat het doel van de staging build is om het gedrag van je wijzigingen te testen zoals ze op de productiedatabase zouden zijn, dus je wilt niet dat een module automatisch wordt geïnstalleerd.
Implementeren in productie¶
Zodra je de module hebt getest in een staging branch met de productiedata en denkt dat deze klaar is voor productie, kun je je branch samenvoegen met de productiebranch door:
De staging branch naar de productiebranch te slepen.
Het commando
git mergete gebruiken om je branches samen te voegen.
Dit voegt de laatste wijzigingen van de staging branch samen met de productiebranch en werkt de productieserver ermee bij.
Zodra de database klaar is, klik je op Verbinden om deze te openen.
Installeer de module¶
Installeer de module vanuit de app Apps. Omdat de module mogelijk niet direct in de lijst met apps verschijnt, werk je de lijst met apps bij door de ontwikkelaarsmodus te activeren en op te klikken.
Voeg een wijziging toe¶
Deze sectie legt uit hoe je een wijziging toevoegt aan je module door een nieuw veld toe te voegen in een model en dit te deployen.
Open vanuit de editor of vanaf je computer de modulemap
~/src/odoo-addons/my_module, en open vervolgens het bestandmodels/models.pyom het te bewerken. Na het beschrijvingsveld:description = fields.Text()
voeg je een datetime-veld toe:
start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
Open het bestand
views/views.xmlen voeg na:<field name="value2"/>
toe:
<field name="start_datetime"/>
Deze wijzigingen passen de databasestructuur aan door een kolom toe te voegen aan een tabel en een weergave te wijzigen. Om toegepast te worden op een bestaande database, zoals je productiedatabase, vereisen deze wijzigingen dat de module wordt bijgewerkt. Als je wilt dat de update automatisch wordt uitgevoerd door het Odoo.sh-platform wanneer je je wijzigingen pusht, verhoog je de moduleversie in het manifest door
__manifest__.pyte openen en te vervangen:'version': '0.1',
door:
'version': '0.2',
Het platform detecteert een versiewijziging en activeert de module-update bij de deployment van de nieuwe revisie.
Vervolgens push je de wijzigingen.
Zodra je je wijzigingen hebt getest, kun je ze samenvoegen in de productietak, bv. door de tak te slepen en neer te zetten op de productietak in de Odoo.sh-interface. Aangezien je de moduleversie in het manifest hebt verhoogd, zal het platform de module automatisch bijwerken en is je nieuwe veld direct beschikbaar. Anders kun je de module handmatig bijwerken in de lijst met apps.
Gebruik een externe Python-bibliotheek¶
Als je een externe Python-bibliotheek wilt gebruiken die niet standaard is geïnstalleerd, kun je een requirements.txt-bestand definiëren met daarin de externe bibliotheken waarvan je modules afhankelijk zijn. Het platform gebruikt dit bestand om automatisch de Python-bibliotheken te installeren die je project nodig heeft.
Notitie
Het is niet mogelijk om systeempakketten te installeren of te upgraden op Odoo.sh-databases (bv. apt-pakketten). Onder specifieke voorwaarden kunnen pakketten echter worden overwogen voor installatie. Dit geldt ook voor Python-modules die systeempakketten nodig hebben voor compilatie en voor externe Odoo-modules.
PostgreSQL-extensies worden niet ondersteund op Odoo.sh, dus het is niet mogelijk om extensies (zoals PostGIS, ltree, …) te installeren in Odoo.sh-databases.
Om bijvoorbeeld de Unidecode-bibliotheek te gebruiken in je module:
Maak een bestand
requirements.txtaan in de hoofdmap van je repository:Maak en open vanuit de Odoo.sh-editor het bestand
~/src/user/requirements.txt.Maak en open vanaf je computer het bestand
~/src/odoo-addons/requirements.txt.
Voeg toe aan het bestand:
unidecode
Je kunt nu de bibliotheek gebruiken in je module, bijvoorbeeld om accenten te verwijderen uit tekens in het naamveld van je model. Open hiervoor het bestand
models/models.pyen voeg voor:from odoo import models, fields, api
toe:
from unidecode import unidecode
Na:
start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
toe:
@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)
Verhoog de moduleversie om de Python-afhankelijkheid te installeren door het modulemanifest
__manifest__.pyte bewerken.-
Tip
Stage het
requirements.txt-bestand doorgit add requirements.txtuit te voeren.