مقدمة
حقل النص في أودو هو الحقل العملي الذي يظهر كلما احتاج المستخدم لكتابة أكثر من كلمة واحدة—ملاحظات داخلية، وصف منتج، أو تعليق على طلب بيع. ببساطة، أينما توجد منطقة ملاحظات متعددة الأسطر، هناك احتمال قوي أنها حقل نص.
يظهر للمستخدم كمنطقة نصية عادية، لكن فهم خصائصه وكيف يندمج مع نموذج البيانات وORM في أودو يغير طريقة تصميمك للنماذج وبناء الوحدات المخصصة أو إعداد الحقول عبر Odoo Studio لفِرق العمل.
في هذا الدليل نغطي ماهية حقل النص وكيف يتصرف، أمثلة تطبيقية في الأعمال، طرق تخصيصه تقنيًا، نصائح عملية، والأخطاء المتكررة التي يقع فيها الناس عند اختيار هذا النوع من الحقول.
ما هو حقل النص في أودو
في طبقة ORM الخاصة بأودو، الحقل المخصص للنصوص المتعددة الأسطر يُعرف كـ fields.Text. في قاعدة بيانات PostgreSQL يُخزن كعمود من نوع TEXT بدون حد لطول المحتوى؛ يمكن للمستخدم كتابة جملة واحدة أو مقالة، والحقل يتعامل مع كلا الحالتين بنفس الكفاءة.
في واجهات النماذج يظهر كعنصر <textarea> قابل لتعديل الحجم عمودياً. في قوائم السجلات يُعرض كنص مقتطع حسب عرض العمود. وفي شاشات البحث يدعم الفلاتر النصية مثل حقل Char.
الصيغة الأساسية لتعريف حقل نص في وحدة بايثون تأخذ شكل محدد ومباشر ضمن ملف الموديل.
from odoo import fields, models
class SaleOrder(models.Model):
_inherit = 'sale.order'
internal_notes = fields.Text(
string='Internal Notes',
translate=False,
)
عند إنشائه عبر Odoo Studio يُسمى الحقل Multi-Line Text ويحصل تلقائياً على بادئة x_studio_. عند إنشائه برمجياً أو عبر API فأنت تختار الاسم التقني بنفسك.
الاختلاف بين Char وText وHtml
هناك ثلاثة أنواع تُخزن محتوى نصي في أودو، وفهم متى تستخدم كل نوع يوفر عليك تعقيدات لاحقة:
- حقل Char: مخصص لسطر واحد. مناسب لأسماء، رموز، أو مرجع قصير. يدعم تحديد طول اختياري.
- حقل Text: منطقة متعددة الأسطر. مناسب للملاحظات، الأوصاف، والتعليقات الحرة. يخزن نصاً بسيطاً بدون تنسيق.
- حقل Html: محرر نص غني متعدد الأسطر. مناسب لمحتوى يحتاج تنسيقاً—قوالب بريد، أوصاف موقع المنتجات، صفحات الويب. يخزن HTML.
حقل Text يجلس وسط الخيارين: يمنح مساحة أكبر من Char لكنه لا يحمل تعقيد علامات HTML. لمعظم الملاحظات الداخلية والأوصاف البسيطة، Text هو الاختيار المعقول.
كيف يعمل هذا الحقل
عند إضافتك لحقل Text في موديل أودو، يقوم الإطار تلقائياً بإنشاء عمود TEXT في PostgreSQL أثناء تثبيت أو ترقية الوحدة، دون الحاجة لهجرات SQL يدوية.
على خلاف Char، لا يوجد خيار size لحقل Text. العمود في قاعدة البيانات لا يفرض حدًا على عدد الأحرف، لأن الهدف منه استقبال محتوى مفتوح الطول.
السمات الأساسية للحقل
الخصائص الأهم لحقل Text داخل إطار أودو:
- translate: عند ضبطه على
Trueيصبح بإمكانك ترجمة قيمة الحقل لكل لغة، وهذا ضروري للحالات التي تظهر فيها النصوص أمام عملاء بلغات مختلفة. - required: يجعل الحقل إلزامياً على مستوى الواجهة وORM؛ لا يمكن حفظ السجل دون تعبئته.
- default: يحدد قيمة افتراضية عند إنشاء السجلات الجديدة، يمكن أن تكون نص ثابت أو دالة تستدعي قيمة.
- compute: يربط الحقل بدالة بايثون تحسب قيمته ديناميكياً—مفيد لملخصات مُولدة أو محتوى مشتق.
- store: عند استخدامه مع
computeيحدد ما إذا كانت القيمة المحسوبة تُخزن في قاعدة البيانات؛ معstore=Trueتصبح قابلة للبحث وإدراجها في التقارير. - copy: يتحكم فيما إذا كانت قيمة الحقل تُنسخ عند تكرار السجل. الافتراضي
True. ضعFalseللملاحظات التي لا ينبغي أن تنتقل للسجل المكرر. - index: نادراً ما يُستخدم على حقول Text لأن فهرسة النص الكامل تختلف عن فهرس B-tree المستخدم لحقول Char. للفهرسة والبحث يُعتمد عادةً على خاصية البحث النصي في PostgreSQL أو فلاتر أودو.
كيفية عرضه في الواجهات
في نماذج الإدخال يظهر الحقل كمربع نص <textarea> قابل لتغيير الحجم عمودياً. في قوائم العرض يتم اقتطاع المحتوى بحسب عرض العمود. وفي شاشات البحث يدعم البحث النصي بمجرد إضافته لتعريف عرض البحث.
على عكس Html، لا يحمل حقل Text محرر WYSIWYG؛ ما يكتبه المستخدم هو نفسه الذي يُخزن، مع حفظ فواصل الأسطر كما هي.
التعامل مع ORM في التطوير
للمطورين، قراءة وكتابة حقول Text في أودو بسيطة: تقرأ القيمة من كائن السجل والORM يهتم بالحفظ. فواصل الأسطر تُخزن كما هي، ولا يتم تطبيق تنظيف أو هروب تلقائي كما يحدث في حقول Html—وهذا سبب آخر يميز الحقلين خاصة من زاوية الأمان.
حالات استخدام عملية
تظهر حقول Text في أماكن عمل حقيقية حيث يحتاج المستخدمون لكتابة أكثر من سطر واحد. فيما يلي خمسة أمثلة عملية شائعة.
المبيعات: ملاحظات داخلية على الطلبات
في أوامر البيع يوجد حقل ملاحظات يستخدمه مندوبي المبيعات لتدوين تعليمات التسليم، متطلبات تغليف خاصة، أو تفضيلات العميل التي لا تناسب حقلًا هيكليًا. هذه الملاحظات تبقى مع الطلب وتُطلع فرق التشغيل دون الظهور في مستندات العميل.
المخزون: ملاحظات داخلية على المنتج
في نموذج المنتج عادةً نجد تبويب "ملاحظات" يحتوي على حقل نص للملحوظات التشغيلية؛ فرق المستودع تكتب تعليمات المناولة، تحذيرات هشة، أو معلومات المورد التي لا تُعرض للعامة.
المشتريات: شروط المورد وتعليمات التسليم
في أوامر الشراء يستخدم قسم الملاحظات النصية لتوثيق اتفاقات خاصة أو قيود تسليم تم الاتفاق عليها عبر الهاتف أو البريد. وجود هذه المعلومة على السجل يقلل الأخطاء عند استلام البضائع.
إدارة علاقات العملاء: ملخصات الفرص وملاحظات الاجتماعات
فرق المبيعات تُسجل ملاحظات اللقاءات، اعتراضات العميل، أو سياق عملية الشراء في حقل نص مخصص على سجل الفرصة. هذا يسهّل على زميل آخر فهم حالة العميل بسرعة دون الخلط مع رسائل الدردشة.
الموارد البشرية: ملاحظات عن الموظفين والمتقدمين
فرق الموارد البشرية تحتاج لتسجيل ملاحظات مقابلات، تعليقات اندماج، أو ملاحظات أداء مرتبطة بسجل الموظف أو المتقدم. حقل Text على نموذج الموظف طريقة بسيطة لحفظ هذه المعلومات بحيث يمكن البحث عنها وطباعتها في تقارير مخصصة.
إضافة الحقل أو تخصيصه
ثلاث طرق أساسية لإضافة حقل Text لموديل أودو حسب السياق الفني وطريقة النشر.
باستخدام Odoo Studio (بدون كود)
Odoo Studio هو أسهل طريق للمستخدمين الاستشاريين الذين لا يريدون كتابة بايثون. خطوات سريعة لإضافة الحقل بدون تطوير:
- افتح Odoo Studio من القائمة الرئيسية (يتطلب تطبيق Studio).
- انتقل إلى النموذج الذي تريد إضافة الحقل إليه.
- اسحب عنصر Multi-Line Text من شريط Studio إلى داخل النموذج.
- اضبط العلامة، حالة الإلزام، وأي قيمة افتراضية في لوحة خصائص الحقل.
- احفظ ثم أغلق Studio.
يتولى Studio إنشاء الحقل وتعديل العرض تلقائياً؛ يُعطى الحقل بادئة x_studio_ ويصبح متاحًا فوراً دون هجرة قاعدة بيانات أو إعادة تشغيل الخادم.
باستخدام بايثون في وحدة مخصصة
للتخصيصات التي تحتاج تتبع إصدار ونشر عبر بيئات متعددة، تعريف الحقل في بايثون داخل وحدة هو النهج الصحيح—وهو المعيار في تطوير أودو:
from odoo import fields, models
class ResPartner(models.Model):
_inherit = 'res.partner'
x_client_notes = fields.Text(
string='Client Notes',
translate=False,
copy=False,
)
بعد تعريف الحقل في ملف الموديل، تضيفه إلى تعريف العرض XML ليظهر في الواجهة. أودو ينشئ عمود قاعدة البيانات تلقائياً عند تثبيت أو ترقية الوحدة. هذه الطريقة هي الموصى بها للبيئات الإنتاجية التي تحتاج صيانة مستمرة.
باستخدام XML-RPC API
إذا كنت تدير الحقول برمجياً عبر سكربت نشر أو إعدادٍ عن بُعد، يمكنك إنشاء حقول Text عبر XML-RPC API:
field_id = models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'ir.model.fields', 'create',
[{
'name': 'x_client_notes',
'field_description': 'Client Notes',
'model_id': model_id,
'ttype': 'text',
'state': 'manual',
'translate': False,
'copy': False,
}]
)
تحدد الخاصية ttype: text لأودو أن الحقل من نوع Text. وضع state: manual يشير إلى أن الحقل أنشئ خارج وحدة، وهو السلوك المتوقع للحقول المنشأة عبر Studio أو API—طريقة مفيدة لإدارة إعدادات الحقول عن بُعد.
ممارسات موصى بها
1. استخدم Text فقط عندما تحتاج فعلاً لأسطر متعددة
الخطأ الشائع هو اختيار Text بينما يكفي حقل Char. إذا كان المحتوى اسمًا، رمزًا أو مرجعًا قصيرًا، فاختر Char. استخدام Text لمحتوى سطر واحد يضر بتجربة المستخدم ويعطي انطباعًا خاطئًا عن نموذج البيانات.
2. اختر Html عندما يكون التنسيق مهمًا
إذا يحتاج المستخدمون لقوائم نقطية، نص عريض، روابط أو أي تنسيق مرئي، فحقل Text ليس مناسبًا—استخدم Html. مطالبة المستخدمين بإضافة تنسيق داخل textarea عادية سيؤدي إلى إحباط ونتائج غير متوقعة.
3. فعّل translate للمحتوى المرئي للعملاء متعدد اللغات
في بيئات أودو متعددة اللغات، أي حقل نص يظهر في مستندات العملاء أو الموقع يجب أن يمتلك translate=True حتى يمكن تقديم نسخ مترجمة لكل لغة. للملاحظات الداخلية عادة لا تكون الترجمة ضرورية.
4. اجعل copy=False للملاحظات التي لا تُراد تكرارها
عند تكرار سجل مثل أمر بيع أو منتج، تُنسخ حقول Text افتراضياً. لملاحظات السياق المحدد اضبط copy=False حتى لا تنتقل إلى السجل المكرر وتسبب لبسًا.
5. استخدم compute مع store=True للملخصات المولدة تلقائياً
يمكن حساب نص ديناميكي يجمع قيمًا من حقول أخرى. مع store=True و@api.depends() يصبح الناتج مخزنًا وقابلًا للبحث، مما يساعد في إنشاء ملخصات داخلية خفيفة دون بناء تقارير منفصلة.
أخطاء شائعة
اختيار Text بينما تحتاج حقًا Html
إذا كان الغرض عرض المحتوى على الموقع أو في تقرير PDF منسق، فاستعمال Text سيزيل أي تنسيق. محتوى منسق بلغة HTML سيظهر كنص عادي في Text—فكّر في قناة الخرج أولاً قبل اختيار نوع الحقل.
اختيار Text بينما Char هو الأنسب
حقل Text يظهر كمربع نص طويل قابل لتغيير الحجم؛ إذا كان الحقل سيحمل قيمة قصيرة مثل رقم تتبع أو رمز متغير، فإن Text يخلق واجهة ضخمة. القيم أحادية السطر تنتمي إلى Char.
نسيان translate على الحقول المرئية للمستخدمين المتعددين اللغات
في نشرات متعددة الدول، عدم ضبط translate=True على حقل نص يظهر للمستخدمين يعني أن الجميع سيرون نفس المحتوى بغض النظر عن لغة الواجهة. إصلاح ذلك بعد وجود بيانات يتطلب هجرة حذرة لتفادي فقدان القيم.
استخدام Text لتخزين بيانات منظمة
تخزين JSON أو قيم مفصولة بشرطة داخل حقل نص هو وصفة لمشاكل صيانة. إذا كان للبيانات بنية ثابتة استعمل أنواع الحقول المناسبة—Selection، Many2one أو موديل مرتبط—فك التشفير داخل نص يعيق الفرز والتجميع والتقارير.
عدم إضافة الحقل إلى شاشة البحث
حقل نص يحمل معلومات مهمة لكنه غير مضاف إلى view البحث يجعل المستخدمين يتصفحون السجلات يدوياً بدلاً من فلترتها بكلمة مفتاحية. إن كان الحقل سيُستخدم في البحث فأضفه إلى تعريف شاشة البحث عند إنشائه.
خلاصة
حقل Text هو عنصر بسيط في واجهة أودو لكنه يصبح مهماً عندما تبدأ بتصميم النماذج باحتراف.
التمييز الصحيح بين Char وText وHtml هو قرار أساسي في أي مشروع تخصيص أودو؛ اتخاذ القرار السليم مبكراً يوفر إعادة عمل ومشاكل جودة بيانات لاحقًا.
سواء أضفت حقل ملاحظات عبر Odoo Studio، عرفته في وحدة بايثون، أو أنشأته عبر API، الأنماط والنصائح في هذا الدليل تساعدك على اتخاذ القرار المناسب وتكوين الحقل بشكل يلائم هدفك.
نموذج بيانات أودو محكم يقوم على قرارات صغيرة صحيحة؛ اختيار نوع الحقل المناسب لكل معلومة هو أحد هذه القرارات، وحقل Text إذا استُخدم في السياق الصحيح يعتبر أداة مرنة وموثوقة لاحتواء المحتوى الحر.
في Dasolo نساعد الشركات على تنفيذ وتخصيص وتحسين أودو عبر الأقسام. سواء احتجت مساعدة في تصميم نموذج بيانات نظيف، بناء حقول وسير عمل مخصصة، أو إعداد تنفيذ أودو كامل من الصفر—فريقنا جاهز لدعمك. تواصل معنا ولنتحدث عن مشروع أودو الخاص بك.