تخطي للذهاب إلى المحتوى

فهم بنية المنتجات في Odoo: نموذج product.template

دليل شامل لمخطط منتجات أودو مخصّص للمطورين والاستشاريين الوظيفيين
10 مارس 2026 بواسطة
فهم بنية المنتجات في Odoo: نموذج product.template
Dasolo
لا توجد تعليقات بعد

مقدمة


في نظام Odoo، تُنظم البيانات داخل نماذج تُحدد شكلها ومكان تخزينها في قاعدة البيانات. كل سجل أعمال تتعامل معه—من عروض البيع إلى الفواتير والمنتجات—يُخزن ضمن نموذج له بنية محددة.


فهم بنية النماذج في Odoo ضروري لكل من الاستشاريين التقنيين والوظيفيين. هذه النماذج تشكل هيكل البيانات الرئيسي: تعرّف الحقول، الروابط بين السجلات، والمنطق التجاري. معظم نماذج Odoo تتبع أنماطًا متسقة تسهل التعلم والتطوير.


سيركز هذا الدليل على أحد النماذج المحورية في Odoo: product.template. سواء كنت تُنشئ إضافات مخصصة، تُربط أنظمة خارجية، أو تُعد كتالوج منتجات لمتجر إلكتروني، ستتعامل كثيرًا مع هذا النموذج.

ما هو نموذج product.template


يفسر نموذج product.template فكرة تجميع منتجات متشابهة تحت تعريف واحد، بينما تُسجل الاختلافات الدقيقة (مثل المقاس أو اللون) في متغيرات فرعية. بهذه الطريقة تُدير مجموعة من المتغيرات تحت قالب مشترك بدلًا من تكرار السجلات لكل نسخة.


يظهر هذا النموذج في العديد من تطبيقات الأعمال داخل Odoo: مبيعات، مشتريات، مخزون، متجر إلكتروني وتصنيع. عند إضافة منتج إلى الكتالوج، تُنشأ عادةً بطاقة template؛ وعند إدخال أمر بيع يختار المستخدم أحد المتغيرات المرتبطة بالقالب.


تعريف النموذج موجود داخل وحدة المنتج (product module)، لكن وحدات أخرى توسّع وظائفه عبر وراثة النماذج. على سبيل المثال: وحدة المبيعات تضيف منطق التسعير والفوترة، وحدة المشتريات تضيف بيانات الموردين، ووحدة المخزون تضيف تتبع المخزون—كل إضافة تُكمّل الهيكل الأساسي بدون تكرار.

التمييز بين product.template و product.product أمر حاسم: القالب يحتفظ بالبيانات المشتركة (وصف، صور، إعدادات عامة)، بينما المتغير (product.product) يحتوي معلومات فريدة لكل نسخة مثل الرمز الداخلي أو الباركود.

الحقول الأساسية في النموذج


فيما يلي أهم الحقول التي تجدها في نموذج product.template. معرفتك بها تجعل التعامل مع المنتجات أكثر دقة وفعالية.


1. name

النوع: Char. اسم المنتج الظاهر في القوائم والنماذج. يعمل كهوية قابلة للعرض داخل النظام.


2. create_date

النوع: Datetime. تاريخ ووقت إنشاء السجل. إدارة تلقائية من Odoo مفيدة للتقارير والتدقيق.


3. write_date

النوع: Datetime. تاريخ آخر تعديل للسجل. يُستخدم لتتبّع آخر تحديثات البيانات.


4. active

النوع: Boolean. علم الأرشفة الناعمة: عند تعيينه False يُخفي السجل من العروض الافتراضية دون حذفه نهائيًا.


5. sequence

النوع: Integer. ترتيب العرض في القوائم والاختيارات—القيم الأقل تظهر أولًا.


6. type

النوع: Selection. نوع المنتج: قابل للاستهلاك، خدمة، أو مخزني. يحدد سلوك التتبع والمحاسبة للمخزون.


7. categ_id

النوع: Many2one (product.category). فئة المنتج التي تؤثر في التقارير، المسارات الافتراضية، وتنظيم الكتالوج. يمكن تنظيم الفئات بشكل هرمي.


8. list_price

النوع: Float. سعر البيع الافتراضي المستخدم عند إنشاء عروض الأسعار، مع إمكانية تجاوزه عبر قواعد تعريفة السعر.


9. standard_price

النوع: Float. تكلفة المنتج الأساسية. تؤثر على حساب الربحية وتقييم المخزون.


10. currency_id

النوع: Many2one (res.currency). العملة المرتبطة بـ list_price و standard_price، وعادة ما ترث من إعدادات الشركة.


11. uom_id

النوع: Many2one (uom.uom). وحدة القياس المستخدمة في المبيعات—مثل وحدة، كيلوغرام، لتر.


12. uom_po_id

النوع: Many2one (uom.uom). وحدة القياس الخاصة بالشراء، وقد تختلف عن uom_id عند الحاجة للتحويل.


13. default_code

النوع: Char. المرجع الداخلي أو الكود (SKU). مفيد لمطابقة البيانات مع أنظمة خارجية أو لأغراض الترقيم.


14. barcode

النوع: Char. رمز شريطي للاستخدام في نقاط البيع والمخازن. عادةً ما يُسجل الباركود على مستوى المتغيرات.


15. description

النوع: Char. وصف داخلي مرئي للمستخدمين داخل المؤسسة، يُستخدم كملاحظات حول المنتج.


16. description_sale

النوع: Text. وصف مخصص للعروض والفواتير، يمكن أن يتضمن تنسيقات HTML لعرض أجمل على الواجهات.


17. description_purchase

النوع: Text. وصف يظهر في أوامر الشراء وفواتير الموردين لتوضيح المتطلبات للمشتريات.


18. sale_ok

النوع: Boolean. يحدد ما إذا كان يمكن بيع المنتج؛ إن كان False يُخفي المنتج من قوائم المبيعات.


19. purchase_ok

النوع: Boolean. يحدد ما إذا كان يمكن شراؤه؛ إن كان False يُخفي المنتج من نماذج المشتريات.


20. weight

النوع: Float. وزن المنتج لتقدير الشحن والتكاليف اللوجستية—الوحدة تعتمد على إعدادات الشركة.


21. volume

النوع: Float. حجم المنتج لمراعاة سعة التخزين والتخطيط اللوجستي.


22. product_variant_ids

النوع: One2many (product.product). قائمة المتغيرات المرتبطة بالقالب، كل متغير يرث السمات العامة من القالب.


23. product_variant_count

النوع: Integer. عدد المتغيرات المحسوب من product_variant_ids ويُستخدم للعرض والتصفية.


24. image_1920

النوع: Binary. صورة المنتج. Odoo يخزن أحجامًا متعددة لاستخدامها في النماذج، التقارير، والموقع الإلكتروني.


25. responsible_id

النوع: Many2one (res.users). المستخدم المسؤول عن إدارة المنتج والمهام المرتبطة به.


26. company_id

النوع: Many2one (res.company). في بيئات تعدد الشركات يُحدد هذا الحقل أي شركة يخصها المنتج.


27. tax_ids

النوع: Many2many (account.tax). ضرائب العملاء المطبقة على مبيعات المنتج، وتظهر على الفواتير.


28. supplier_tax_id

النوع: Many2many (account.tax). ضرائب الموردين المطبقة على مشتريات المنتج.


29. attribute_line_ids

النوع: One2many. خطوط السمات التي تحدد أي خصائص (مثل المقاس، اللون) تُنتج المتغيرات.


30. route_ids

النوع: Many2many (stock.route). المسارات التخزينية التي تتحكم في تدفق المنتج عبر سلسلة التوريد—مثل الشراء أو التصنيع حسب الطلب.


31. property_stock_production

النوع: Many2one (stock.location). موقع الإنتاج الافتراضي للمنتجات المصنعة، يُستخدم مع المسارات التصنيعية.


32. property_stock_inventory

النوع: Many2one (stock.location). الموقع المستخدم لتعديلات الجرد والتصحيحات.


33. property_valuation

النوع: Selection. طريقة تقييم المخزون: تلقائية أو يدوية، وتؤثر على احتساب القيمة.


34. property_cost_method

النوع: Selection. طريقة التكلفة: معيارية أو FIFO، تحدد كيفية حساب قيمة المخزون عبر الزمن.


35. property_account_income_id

النوع: Many2one (account.account). حساب الإيرادات المستخدم عند الفوترة للمبيعات.


36. property_account_expense_id

النوع: Many2one (account.account). حساب المصروفات المستخدم عند فواتير الموردين.


37. invoice_policy

النوع: Selection. متى تُفوتر المبيعات: عند الطلب أم عند التسليم—يؤثر ذلك على اعتراف الإيرادات.


38. expense_policy

النوع: Selection. متى تُعتمد التكلفة كمصروف: عند الطلب أم التسليم—يؤثر على محاسبة التكاليف.


39. service_type

النوع: Selection. لمنتجات الخدمة: نوع التتبع سواء يدوي، بنظام الساعات، أو عبر مراحل (Milestones).


40. optional_product_ids

النوع: Many2many (product.template). المنتجات الاختيارية المقترحة كإضافات أو ترقية عند إعداد عرض السعر.

كيف يُستخدم هذا النموذج في سير العمل التجاري


1. المبيعات وعروض الأسعار

عند إعداد عرض سعر يختار مندوب المبيعات من كتالوج المنتجات. القالب يمنح الخصائص المشتركة بينما يُختار المتغير المناسب إذا كانت هناك سمات تميّزه.


2. المتجر الإلكتروني

في الموقع الإلكتروني يرى العميل صفحة المنتج المبنية على القالب، ومن هناك يختار المتغير الذي يناسبه. الوصف والصور المشتركة تُدار على مستوى القالب لتوحيد العرض.


3. المشتريات والموردون

أوامر الشراء وفواتير الموردين ترتبط ببيانات المنتج؛ حقل purchase_ok يتحكم في ظهوره، وحقول مثل supplier_tax_id و uom_po_id توجه سلوك الشراء والتسعير.


4. المخزون والتصنيع

حركات المخزون وأوامر التصنيع تشير عادةً إلى المتغيرات. القالب يحدد المسارات وطريقة التقييم والتكلفة، بينما التتبع الفعلي للمخزون يتم على مستوى المتغير.


5. الفوترة

سطر الفاتورة يسحب إعدادات المحاسبة والضرائب من القالب. سياسة الفوترة تحدد توقيت احتساب الإيرادات على المستندات.

كيف يطور المطورون هذا النموذج


يقوم المطورون بتوسيع product.template عبر عدة أساليب ضمن إطار عمل Odoo، مع الاعتماد الرئيسي على وراثة النماذج.


وراثة النموذج

استخدم _inherit = 'product.template' لإضافة حقول أو تجاوز طرق العمل. هذه الوراثة تُمكّنك من إبقاء تعديلاتك في وحدة مستقلة، مما يسهل الصيانة والتحديثات دون تعديل الكود الأصلي.


إضافة حقول

عند إضافة خصائص مخصصة عرف الحقل بنوعه المناسب—Char، Many2one، Boolean، Integer، Text، Selection—واعتنِ بالحقول المعتمدة على الشركة في بيئات تعدد الشركات.


امتدادات بايثون

لتضمين منطق عند إنشاء أو تعديل أو حذف السجلات، قوّم تجاوز create و write و unlink مع استدعاء super(). راعِ الحقول المحسوبة وموارد الاعتماد الخاصة بها لكي لا تتسبب في نتائج غير متوقعة.


Odoo Studio

Odoo Studio خيار سريع لإضافة حقول وواجهات بدون كود، لكنه أقل ملاءمة للمنطق المعقد أو حالات الترقية الطويلة مقارنةً بوحدات مخصصة مكتوبة بشكل منظم.

أفضل الممارسات


  • ضع علاقة القالب بالمتغيرات في موضعها الصحيح: البيانات العامة على القالب، والبيانات الخاصة بكل نسخة على product.product.
  • حدِّد فئة المنتج (categ_id) بعناية لأنها تؤثر في المسارات الافتراضية والتقارير وعمليات النظام.
  • استخدم default_code كمرجع خارجي عند الربط مع أنظمة خارجية واحرص على الحفاظ على تفرّده قدر الإمكان.
  • عند بناء تكاملات API، اعتمد XML-RPC أو JSON-RPC المتوفرين في Odoo. نموذج product.template متاح بالكامل عبر واجهة الـ API، ومن الضروري مضاهاة المعرفات الخارجية بدقة.
  • للحقل المخصص استعمل بادئة x_ أو بادئة تحمل اسم الوحدة لتجنّب تضارب الأسماء مع إصدارات Odoo المستقبلية.

الأخطاء الشائعة


  • إنشاء قوالب مكررة بدل استخدام المتغيرات. للمواصفات التي تختلف فقط بالمقاس أو اللون استخدم attribute_line_ids لإنشاء متغيرات بدل نسخ القالب.
  • خلط المفاهيم بين product.template و product.product. إذا كنت بحاجة لبيانات متميزة لكل نسخة—مثل الباركود أو SKU—ضعها في product.product.
  • نسيان ضبط حقول sale_ok أو purchase_ok يؤدي إلى اختفاء المنتج من نماذج البيع أو الشراء دون أن يكون واضحًا سبب المشكلة.
  • تجاوز طرق أساسية دون استدعاء super() قد يوقف عمل وحدات أخرى أو يجعل الترقية المستقبلية عرضة للخطأ.
  • إضافة حقول مطلوبة بدون قيم افتراضية قد يكسر السجلات القائمة عند ترقية النظام بسبب فشل التحقق من القيم المطلوبة.

خاتمة


نموذج product.template هو العمود الفقري لإدارة تعريفات المنتجات في Odoo. معرفة الحقول وكيفية تمديدها يساعدك على ضبط النظام، كتابة إضافات سليمة، وتنفيذ تكاملات موثوقة.


سواءً كنت مستشارًا وظيفيًا يُعد كتالوجًا أو مطورًا يبني وحدات مخصصة، فهم واضح لـ product.template يُوفّر وقتًا ويقلل المخاطر والأخطاء.

ابدأ مع Dasolo


تقدّم Dasolo خدمات تنفيذ وتطوير وتحسين Odoo، مع تركيز خاص على تكاملات API وبرمجة الوحدات. فريقنا يملك خبرة عملية عميقة في بنية بيانات Odoo ونماذج مثل product.template.


إذا احتجت دعمًا في تنفيذ Odoo لديك، تطوير وحدات مخصصة، أو ربط أنظمة خارجية، ففريقنا جاهز لمساعدتك. احجز عرضًا توضيحيًا لمناقشة مشروعك.

فهم بنية المنتجات في Odoo: نموذج product.template
Dasolo 10 مارس 2026
شارك هذا المنشور
تسجيل الدخول حتى تترك تعليقاً