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

حقول Domain في Odoo — الدليل الشامل للمطورين والمستخدمين

اكتشف وظيفة حقل "النطاق" في أودو: متى ولماذا يُستخدم، أين يَظهر داخل النظام، وكيف تَدرِجه بذكاء في نموذج البيانات والتعديلات المخصصة. سنوضح ببساطة كيف يُمكّنك هذا الحقل من تعريف شروط مرنة للبحث والتصفية، طرق كتابته وصياغته داخل تعريفات النماذج والرّوابط، وأمثلة عملية لتضمينه في شاشات وقوائم وتقارير بحيث تُحسّن من دقة البيانات وتجربة المستخدم دون تعقيد غير ضروري.
6 مارس 2026 بواسطة
حقول Domain في Odoo — الدليل الشامل للمطورين والمستخدمين
Dasolo
لا توجد تعليقات بعد

إذا تعاملت مع إعدادات أودو فستصادف في الواجهة شروط تصفية مكتوبة بين أقواس تُستخدم في الأزرار والإجراءات الآلية وقواعد السجلات ونماذج الرسائل. بالإضافة إلى ذلك، يوفّر نظام أودو نوع حقل مخصّص يُدعى Domain داخل الـ ORM لتخزين هذه الشروط بشكل منظّم بدلًا من حفظها كنص عادي.


فهم ماهية حقول Domain مفيد سواء كنت مطوّرًا تطوّر وحدات مخصصة أو مستخدمًا ينشئ مهام آلية. هذا الدليل يشرح ما يخزنه الحقل، أمثلة عملية، كيف تبنيه في كود أودو، ونقاط الحذر الشائعة.

ما المقصود بحقل Domain في أودو؟


في أودو، كلمة domain تشير إلى قائمة شروط تُستعمل لتصفية السجلات عند الاستعلام. لها صيغة محددة تبني شروطًا منطقية تقابِل عادة عبارة WHERE في قواعد البيانات عند تنفيذ البحث.

شكل الشروط النموذجي يكون مثل المثال التالي:


[('customer_rank', '>', 0), ('active', '=', True)]

المعنى العملي: استرجع السجلات التي يزيد فيها customer_rank عن صفر والتي تكون مفعّلة (active = True).


حقل Domain (fields.Domain) هو نوع حقل في ORM الخاص بأودو مخصّص لحفظ هذه التعبيرات ضمن سجل. بخلاف حقل نصي عادي، يحتفظ بالتحقّق من الصيغة ويُظهِر أداة واجهة تسمح للمستخدمين ببناء شروط بصريًا دون كتابة الكود.


كيف يظهر في الواجهة

في شاشة أودو يظهر الحقل باستخدام محرر الـ domain الافتراضي. هذا المحرر هو مُجمّع مرئي للشروط: تختار الحقل، تختار العامل (يساوي، يحتوي، أكبر من...) وتُدخل القيمة. نفس الواجهة موجودة عند إعداد قواعد الوصول أو مرشحات الإجراءات الآلية.


على مستوى التخزين، تُحفظ قيمة الـ domain كنص يمثل قائمة بايثون. نوع الحقل يتكفّل بتحويل القيمة بين الشكل النصي المخزّن والهيكلة التي يتعامل معها المطوّر في بايثون، مع التحقق اللازم.

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

كيف يعمل الحقل عمليًا


تكامل الحقل مع ORM ونظام التصفية في أودو يحدث عبر خطوات محددة عند حفظ أو تقييم الـ domain.


التخزين والتمثيل

عند حفظ شرط Domain في قاعدة البيانات، تُخزّن التعبيرة كسلسلة نصية. يمكن أن تحتوي التعبيرة على متغيرات ديناميكية مثل uid التي تُستبدل بمعرف المستخدم الحالي عند وقت الاستعلام، مما يتيح فلترة مرنة دون كتابة معرّفات ثابتة.

عند تنفيذ البحث، يأخذ ORM النص ويقيّمه بطريقة محمية ثم يحوّله إلى جزء WHERE في استعلام SQL. عملية التقييم تستخدم آليات أمان تدعم مجموعة محدودة من تعابير بايثون ومتغيرات خاصة بأودو.


محرر الـ domain في الواجهة

الودجت الخاص بحقول fields.Domain يعرض محرر الشروط المعتاد: يستطيع المستخدم إضافة شروط، ربطها بـ AND/OR ورؤية تأثيرها قبل الحفظ دون كتابة سطر أوامر.

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


سياق النموذج

يمكن ربط حقل Domain بنموذج محدد ليعرف المحرر أي الحقول متاحة لبناء الشروط. يتم ذلك عبر خاصية model_field في تعريف الحقل. إذا لم تُحدَّد هذه المرجعية، يتحول المدخل إلى مربع نص بسيط بلا اقتراحات ذكية.


ربط سياق النموذج يوضّح كيف يربط إطار عمل أودو بين تعريف الحقول وسلوك الواجهة: الحقل يعرف النموذج المراد فلترته والواجهة تتكيّف لتعطي المستخدم خيارات مناسبة.


التفاعل مع سجلات أخرى

تُستخدم حقول Domain غالبًا مع الحقول العلائقية لاحتواء الخيارات في قوائم Many2one، أو لتحديد أهداف إجراءٍ آلي، أو لتحديد نطاق تقرير. التعبير يُطبّق على مستوى ORM وبذلك يحترم قواعد الأمان وأذونات الحقول.

حالات استخدام فعلية في الأعمال


تظهر حقول Domain في معظم وحدات أودو. فيما يلي خمسة أمثلة عملية توضح دورها في سير العمل.


1. إجراءات آلية وتنبيهات البريد

عند إعداد إجراء آلي، تحدد شرطًا يبيّن أي السجلات ستُشغّل الإجراء. مثال: رسالة تذكير للفواتير المتأخرة تستهدف الفواتير المنشورة وغير المسددة والتي تجاوزت تاريخ الاستحقاق؛ هذا الشرط يُخزَّن في حقل Domain داخل نموذج base.automation ويُطبّق فقط على السجلات المطابقة.


2. قواعد السجلات والتحكم بالوصول

تستخدم قواعد الأمن تعبيرات Domain لتحديد السجلات التي يستطيع مجموعة مستخدمين رؤيتها أو تعديلها. مثال: تقييد فريق المبيعات ليعرض فقط السجلات المرتبطة بفريقهم، ويطبّق هذا التقييد ديناميكيًا عند الاستعلام دون كتابة منطق مخصص.


3. تصفية المخزون والعمليات

في إدارة المستودعات، تُستخدم Domains لاستهداف فئات منتجات أو مواقع أو مستويات مخزون معينة عند تنفيذ إجراءات مجدولة أو قواعد إعادة الطلب، مما يمنع معالجة غير ضرورية على آلاف السجلات.


4. أنظمة CRM وتوزيع العملاء المحتملين

في إدارة علاقات العملاء تُستخدم التعابير لتصنيف العملاء المحتملين وتعيينهم تلقائيًا. قواعد توزيع العملاء يمكن أن تبنى على الدولة أو القطاع أو حجم الصفقة، وذلك بفضل حقل Domain الذي يجعل القواعد قابلة للتعديل من الواجهة بدلًا من تعديل الكود لكل سيناريو.


5. قوائم Many2one ديناميكية

عند بناء نماذج مخصّصة يمكن لتعبير Domain على حقل Many2one تحديد السجلات الظاهرة في القائمة. مثلًا إظهار الموردين النشطين فقط أو الذين لديهم ترتيب توريد أعلى من صفر، ويمكن أن يكون الشرط ديناميكيًا ويرتبط بقيم حقول أخرى على النموذج.

إنشاء الحقل أو تخصيصه


ثانياً، طريقتان أساسيتان للعمل مع حقول Domain: تعديل بدون كود عبر Studio، أو تخصيص برمجي باستخدام بايثون وXML في وحدة مخصّصة.


العمل عبر Odoo Studio

Studio لا يوفّر دائمًا خيارًا مباشرًا لإضافة حقل من نوع Domain عبر مُنشئ الحقول البصري، لكن في أغلب حالات المستخدم لا يحتاج لحقل مستقل. محرّرات الـ domain المدمجة في قواعد السجلات والإجراءات تكفي لمعظم احتياجات التخصيص بدون كود.

إذا أردت تطبيق مرشح على Many2one داخل Studio، يمكنك تعديل خصائص الحقل وإدخال تعبير Domain. ستتحقّق Studio من صيغة التعبير وتخزّنه في تعريف العرض.


التخصيص التقني عبر بايثون

في وحدة أودو مخصصة، إضافة حقل Domain أمر بسيط ومتداول في دلائل المطوّرين.

from odoo import models, fields

class MyModel(models.Model):
    _name = 'my.model'

    model_name = fields.Char(default='res.partner')
    filter_domain = fields.Domain(
        string='Filter Domain',
        model_field='model_name',
        help='Domain expression to filter partner records'
    )

تُربط الخاصية model_field باسم النموذج المخزّن في model_name، ليعرف محرر الشروط أي الحقول يعرض للمستخدم. إبقاء اسم النموذج في حقل منفصل يساعد إن أردت تغيير النموذج ديناميكيًا.


عرض الودجت داخل عرض النموذج

لعرض مُنشئ الـ domain داخل واجهة النموذج يجب الإشارة لكلا الحقلين في XML الخاص بالعرض:


<field name="model_name" invisible="1"/>
<field name="filter_domain" widget="domain"
       options="{'model': 'model_name'}"/>

بدون تحديد widget="domain" وخيار النموذج، سيظهر الحقل كمربع نص عادي. لذا تأكد دائمًا من تضمينهما عند عرض إعدادات الـ domain للمستخدمين.


كتابة قيم الـ domain عبر XML-RPC

عند ضبط قيمة حقل Domain برمجيًا عبر واجهة API، أرسِل القيمة كسلسلة نصية دائمًا.

models.execute_kw(db, uid, api_key, 'my.model', 'write',
    [[record_id], {
        'filter_domain': "[('active', '=', True)]"
    }]
)

إرسال قائمة بايثون بدل السلسلة هو خطأ شائع يسبّب استثناء أو فشلًا صامتًا بحسب نسخة أودو. لذلك قم دائمًا بتسلسل التعبير إلى نص قبل الإرسال.

ممارسات مفضّلة


اتباع هذه العادات العملية يوفر وقتك ويقلّل حدوث مشكلات عند التعامل مع حقول Domain.


تحقق من صحة الصيغة قبل النشر

تعبير Domain غير صحيح يسبب أخطاء عند التقييم. اختبر شروطك في شريط البحث أو في وضع المطوّر قبل حفظها في إجراءات آلية أو قواعد. بإمكانك أيضًا استخدام استدعاء search_count عبر API للتحقق من أن المجال يعيد عدد السجلات المتوقع.


استخدم متغيرات ديناميكية كلما أمكن

تجنّب كتابة معرّفات ثابتة للمستخدم أو الشركة أو التاريخ داخل التعبيرات. استخدم متغيرات مثل uid أو context_today() أو current_company_id لجعل الشروط قابلة للنقل وآمنة عبر البيئات.


ربط سياق النموذج دائمًا

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


حافظ على قراءة الشروط بسهولة

المجالات المعقّدة التي تحتوي على تراكيب متداخلة من OR وAND تصعب صيانتها. ضع تعليقات في كود بايثون توضّح الغرض من كل شرط، وإذا صار المجال معقّدًا جدًا فكّر بصنع فعل خادمي أو حقل محسوب لتبسيط المنطق.


استخدم safe_eval عند التقييم برمجيًا

عند تقييم سلسلة Domain داخل كود بايثون استخدم دالة أودو الآمنة safe_eval بدلًا من eval البايثون الأصلي. هي أكثر أمانًا وتدعم المتغيرات والسياق الخاص بأودو بطريقة متوافقة مع طريقة عمل النظام.


اختبر ببيانات واقعية

تأكّد من أن المجال يجلب السجلات المتوقعة قبل تشغيله في الإنتاج، خصوصًا للإجراءات الآلية وقواعد السجلات حيث قد يسبب فلتر خاطئ معالجة سجلات غير مرغوب فيها أو منع وصول المستخدمين دون أي تنبيه.

أخطاء شائعة يجب تجنّبها


أشهر الأخطاء عند العمل مع حقول Domain وكيفية تجنّبها.


خلط المعنى بين نوع الحقل وصيغة الـ domain

مصطلح domain في أودو يحمل معنيين مختلفين: هو صيغة فلترة (قائمة من التوابل) وأيضًا نوع حقل fields.Domain لتخزين هذه الصيغة. المبتدئون غالبًا يخلطون بين الحالتين؛ تذكّر أن حقل Domain مجرد وعاء للتعبير الذي يحتويه.


إرسال قائمة بدل سلسلة عبر API

عند الكتابة إلى حقل Domain عبر XML-RPC يجب إرسال السلسلة النصية. إرسال قائمة بايثون مباشرة يسبب أخطاء أو فشلًا صامتًا حسب نسخة أودو. سلّس التعبير دائمًا قبل الإرسال.


نسيان ربط سياق النموذج في الودجت

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


تضمين معرّفات سجلات ثابتة داخل المجالات

المجالات التي تشير إلى معرّفات سجلات بعينها تتعرض للكسر عندما تُحذف هذه السجلات أو تُنقل إلى قاعدة بيانات أخرى. استخدم مراجع ديناميكية مثل uid أو علاقات بدلاً من معرّفات ثابتة.


قواعد سجلات واسعة جدًا أو ضيقة جدًا

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


نسيان السجلات المؤرشفة

أودو يستبعد افتراضيًا السجلات المؤرشفة (active = False) من نتائج البحث. إذا لم تُأخذ هذه الحالة بعين الاعتبار قد تلاحظ فجوات غير متوقعة. ضمّن ('active', 'in', [True, False]) عند حاجتك لتضمين الأرشيف.

خلاصة


حقول Domain هي لبنات بناء أساسية تُشغل جزءًا كبيرًا من وظائف أودو بشكل صامت. من التحكم بالوصول إلى الإجراءات الآلية والقوائم الديناميكية، تُعتبر تعابير Domain العمود الفقري لعمليات التصفية، ونوع الحقل fields.Domain يوفر طريقة منظّمة ومتحققة لتخزين هذا المنطق داخل نموذج البيانات.


بالنسبة لمستخدمي الأعمال، يجعل محرر الـ domain إعداد الفلاتر ممكنًا بدون كود. وبالنسبة للمطوّرين، يمنح نوع الحقل وضوحًا في تعريف النماذج بدلًا من الاعتماد على حقول نصية عامة مع تجاوزات بالودجت. سواء كنت تعمل عبر Studio أو تكتب وحدة بايثون مخصصة أو تضبط إجراءات آلية من الواجهة، فهم حقول Domain يفتح أمامك إمكانيات واسعة.


المفاهيم التي تناولها هذا الدليل تنطبق عبر نسخ ووحدات أودو المختلفة. استثمار الوقت في فهم حقول Domain يعود عليك بمدى واسع لأن هذه الخاصية متواجدة في كل مكان داخل النظام.


تحتاج مساعدة في تنفيذ أودو؟

تقدم Dasolo خدمات تنفيذ وتخصيص وتحسين أودو بحسب متطلبات الأعمال. سواء إعداد عمليات آلية، تطوير وحدات مخصصة، أو تحسين الاستخدام الحالي، فريقنا يملك الخبرة التقنية لدعمك بثقة.

إذا كانت لديك أسئلة حول حقول Domain أو أي جوانب من تطبيق أودو لديك، تواصل معنا. سنسعد بمراجعة إعداداتك وإرشادك إلى المسار الأنسب.

حقول Domain في Odoo — الدليل الشامل للمطورين والمستخدمين
Dasolo 6 مارس 2026
شارك هذا المنشور
تسجيل الدخول حتى تترك تعليقاً