मॉड्यूल बनाएं

अपना पहला मॉड्यूल बनाने से पहले, Odoo.sh प्रोजेक्ट बनाना और अपने GitHub रिपॉज़िटरी का यूआरएल जानना आवश्यक है।

शब्दावली

  • ~/src वह डायरेक्टरी है जहां आपके Odoo प्रोजेक्ट से संबंधित Git रिपॉज़िटरी स्थित हैं।

  • odoo GitHub उपयोगकर्ता है।

  • odoo-addons GitHub रिपॉज़िटरी है।

  • feature-1 डेवलपमेंट ब्रांच का नाम है।

  • main प्रॉडक्शन ब्रांच का नाम है।

  • my_module मॉड्यूल का नाम है।

इन्हें आवश्यकतानुसार बदलें।

डेवलपमेंट ब्रांच बनाएं

ब्रांच व्यू से:

  • ब्रांच नेविगेशन पैनल में, डेवलपमेंट के बगल में + (नया डेवलपमेंट ब्रांच) बटन पर क्लिक करें।

  • फ़ोर्क के अंतर्गत, main ब्रांच चुनें।

  • को के अंतर्गत, 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 = 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 लाइब्रेरी इस्तेमाल करना चाहते हैं जो डिफ़ॉल्ट रूप से इंस्टॉल नहीं है, तो आप एक requirements.txt फ़ाइल डिफ़ाइन कर सकते हैं जो उन एक्सटर्नल लाइब्रेरी की लिस्ट करती है जिन पर आपके मॉड्यूल निर्भर हैं। प्लेटफ़ॉर्म इस फ़ाइल का इस्तेमाल आपके प्रोजेक्ट को ज़रूरी Python लाइब्रेरी को ऑटोमैटिकली इंस्टॉल करने के लिए करेगा।

टिप्पणी

  • Odoo.sh डेटाबेस पर सिस्टम पैकेज इंस्टॉल या अपग्रेड करना संभव नहीं है (जैसे, apt पैकेज)। हालांकि, विशिष्ट शर्तों के तहत, इंस्टॉलेशन के लिए पैकेज पर विचार किया जा सकता है। यह Python मॉड्यूल पर भी लागू होता है जिन्हें कंपाइलेशन के लिए सिस्टम पैकेज की ज़रूरत होती है और थर्ड-पार्टी Odoo मॉड्यूल पर भी।

  • Odoo.sh पर PostgreSQL एक्सटेंशन सपोर्टेड नहीं हैं, इसलिए Odoo.sh डेटाबेस में एक्सटेंशन (जैसे PostGIS, ltree, ...) इंस्टॉल करना संभव नहीं है।

उदाहरण के लिए, अपने मॉड्यूल में Unidecode library का इस्तेमाल करने के लिए:

  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. module's manifest __manifest__.py को एडिट करके Python डिपेंडेंसी इंस्टॉल करने के लिए मॉड्यूल वर्शन बढ़ाएं।

  6. फिर, push the changes

    सलाह

    git add requirements.txt चलाकर requirements.txt फ़ाइल को स्टेज करें।