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

حل خطأ Related Field في Odoo — دليل كامل لإصلاح المشكلة

دليل عملي لحل خطأ الحقل المرتبط في أودو: تفسير مبسّط لأسباب المشكلة وخطوات إصلاح مُجرّبة للمستخدمين والمطوّرين. هل ظهرت لك رسالة خطأ عند محاولة عرض أو حفظ سجل في أودو تتعلق بـ«related field»؟ هذا الدليل موجَّه لكل من يستخدم أودو أو يطوّره: نشرح كيف يشتغل الحقل المرتبط، لماذا يسبب أخطاء شائعة، وكيف تصلحها خطوة بخطوة دون تخمينات. ماذا يعني الحقل المرتبط؟ باختصار، الحقل المرتبط (related) يعرض قيمة موجودة في سجل آخر بدلًا من تخزينها محليًا. مثلًا، تريد عرض رقم هاتف موظف من نموذج الموظف داخل نموذج المشروع دون تكرار البيانات. أسباب شائعة للأخطاء - المسار المرتبط غير صحيح: اسم الحقل أو علاقة الـMany2one/One2many فيه خطأ. - الحقل المرجعي يغيّر نوعه أو يُحذف من نموذج المصدر بعد تعريف الحقل المرتبط. - مشاكل في الأمان أو صلاحيات الوصول تمنع قراءة السجل المصدر. - تحميل ترتيب الحقول (views) يحتوي على تعريف متضارب أو اسم غير متوافق مع موديل البيانات. فحص مبدئي سريع 1) تأكد من أن أسماء الحقول في تعريف الـrelated تتطابق تمامًا مع الحقول في الموديل المصدر. 2) افتح السجل المصدر يدويًا لترى إن القيمة موجودة. 3) تحقق من صلاحيات المستخدم (record rules، access rights) التي قد تمنع القراءة. خطوات إصلاح مُرتّبة 1. مراجعة تعريف الحقل في ملف الـPython: تأكد من كتابة المسار بالشكل "field_a.field_b" وأن الحقول الوسيطة موجودة وتسمح بالوصول. 2. فحص موديل المصادر: إذا تغيّر نوع الحقل أو أُعيد تسميته، حدّث الـrelated لتعكس التعديل. 3. تحديث العرض (view): افتح XML للـform/tree وابحث عن الحقل المرتبط، تحقق أن الاسم المستخدم متطابق مع تعريف الـPython. 4. اختبار الصلاحيات: جرّب الدخول كمستخدم إداري أو تعطيل مؤقتًا قواعد السجلات لمعرفة إن الخطأ متعلق بصلاحيات. 5. إعادة تشغيل الخادم وتحديث الوحدة (upgrade module) بعد أي تعديل في الكود أو XML. نصائح متقدمة - استخدم compute مع store=True بدل related إذا احتجت منطق تحويل أو حاجتك للأداء. - سجّل الأخطاء في logs بتفعيل مستوى debug لتقرأ trace كاملة. - عند التعامل مع علاقات عميقة (متسلسلة) سلّم المسارات خطوة بخطوة وتحقق من وجود كل رابط وسيط. خلاصة أغلب أخطاء الحقول المرتبطة في أودو تنتج عن مسار خاطئ، تغيّر في الموديل المصدر، أو قيود صلاحية. باتباع فحص منهجي—التحقق من الأسماء، مراجعة الصلاحيات، واختبار التعديلات على الخادم—يمكنك تشخيص المشكلة وإصلاحها بسرعة. إذا احتجت، أرسل تعريف الحقل والـtrace من الـlog وسأوجهك بحلول دقيقة تناسب حالتك.
23 فبراير 2026 بواسطة
Elisa Van Outrive
لا توجد تعليقات بعد

مقدمة


يظهر "خطأ الحقل المرتبط في أودو" عندما يفشل حقل عرّف باستخدام الخاصية related= أثناء التشغيل. عادةً ما تَظهر هذه الأخطاء في سجل الخادم وقد تؤدي إلى تعطل طرق العرض في النماذج، أو قيم محسوبة، أو إجراءات آلية.


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


هذا الدليل يبسط أسباب وقوع أخطاء الحقول المرتبطة ويعرض خطوات عملية لإصلاحها بأمان.

ما المقصود بحقل مرتبط في أودو؟


الحقل المرتبط يمكِّنك من الإشارة إلى حقل موجود في نموذج آخر.


مثال توضيحي:


partner_email = fields.Char(
    related="partner_id.email",
    store=True
)

المغزى من هذا الترتيب:

  • النموذج الحالي يحتوي على حقل Many2one باسم partner_id
  • الحقل المرتبط يعكس قيمة الحقل email من نموذج res.partner

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



أسباب شائعة لأخطاء الحقول المرتبطة في أودو


1. سلسلة علاقة غير صحيحة


إذا أشارت مسار العلاقة إلى حقل غير موجود:


related="partner_id.non_existing_field"

سيؤدي ذلك إلى فشل عند تحميل الوحدة أو أثناء التشغيل.


2. غياب علاقة Many2one


إذا لم يكن partner_id معرفًا في النموذج لكن استُخدم في related= فلن يتمكن الحقل من حل العلاقة.


3. استخدام حقل مرتبط غير مخزن في بنود البحث


إذا لم يكن الحقل المرتبط مُخزناً لكن تم استخدامه في:


  • مجالات البحث
  • الفلاتر
  • التجميع (Group by)

قد يؤدي ذلك إلى سلوك غير متوقع.


مثال توضيحي:


store=False

ولكن إذا استُخدم في البحث → قد يسبب أخطاء.


4. الوصول لعلاقات فارغة


إذا كان partner_id فارغًا، فقد يسبب الوصول إلى partner_id.email مشاكل في بعض السياقات.


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


5. عدم تطابق نوع الحقل


إذا كان نوع الحقل المرتبط لا يتطابق مع نوع الحقل المصدر:


مثال توضيحي:


partner_email = fields.Integer(related="partner_id.email")

سيؤدي عدم التطابق إلى أخطاء تحقق من الصحة.


6. تغيّر بنية الحقول بعد الترقية

بعد ترقية وحدة أو النظام:


  • قد تتغير أسماء الحقول
  • قد تنكسر مسارات العلاقات
  • وقد تتغير تبعيات الوحدات

الحقول المرتبطة حسّاسة لأي تغيّر هيكلي.



كيفية إصلاح أخطاء الحقول المرتبطة في أودو


الخطوة 1 – التحقق من مسار العلاقة

تأكد أن السلسلة كاملة وموجودة:


related="partner_id.email"

افحص أن:


  • partner_id معرف في النموذج
  • حقول email موجودة في نموذج الهدف

الخطوة 2 – التأكد من تطابق أنواع الحقول


إذا كان الحقل الأصلي من نوع Char، يجب أن يكون الحقل المرتبط أيضاً Char.


الخطوة 3 – استخدام store=True عند الحاجة


عندما يُستخدم الحقل المرتبط في البحث أو التقارير:


store=True

وإلا فقد تواجه استعلامات متقدمة سلوكًا غير متوقع.


الخطوة 4 – مراقبة أخطاء تحميل النماذج


إذا ظهر الخطأ أثناء تثبيت الوحدة:


  • أعد تشغيل أودو
  • حدّث الوحدة
  • راجع أثر الاستدعاءات (traceback)

أخطاء الحقول المرتبطة غالبًا ما تظهر عند تهيئة النماذج.


الخطوة 5 – مراجعة التبعيات بعد الترقية

إذا ظهر الخطأ بعد:


  • ترقية إصدار أودو
  • تحديث وحدة مخصصة

تحقق أن مسارات العلاقات لا تزال صحيحة.



كيفية منع أخطاء الحقول المرتبطة



  • احتفظ بسلاسل العلاقات قصيرة وواضحة
  • تجنّب أعماق علاقات متداخلة
  • طابق دائمًا أنواع الحقول
  • استخدم store=True عندما يشارك الحقل في المجالات أو التجميع
  • اختبر ترقيات الوحدات في بيئة مسرحية (staging)

الحقول المرتبطة قوية لكن هشة عندما تتطور النماذج مع مرور الوقت.



كيف تصمم Dasolo بنى علاقات موثوقة


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


ورغم أن الخطأ قد يبدو كسجل تتبع بسيط في السيرفر، فهو عادة مؤشر لمشكلات بنيوية أعمق في علاقات النماذج.


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


  • مراجع حقول غير صحيحة أو قديمة
  • تراكم وراثي معقّد داخل النماذج
  • سلاسل متعدّدة المستويات للحقول المرتبطة
  • سوء إدارة أثناء ترقية الوحدات
  • اختلافات سياق عبر الشركات (cross-company)

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



الخلاصة


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


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


اتباع قواعد صارمة في تصميم العلاقات يجعل أودو أكثر قابلية للتنبؤ، وأسهل للصيانة، وأقوى عندما تتزايد تعقيدات العمل.



أسئلة متكررة


لا. تظهر هذه الأخطاء في إصدارات أودو 14 و15 و16 و17 وغيرها.

نعم. الحقول المرتبطة غير المخزنة قد تبطئ عمليات على مجموعات سجلات كبيرة.

لا — استخدم store=True فقط عند الحاجة للبحث أو التصفية أو التقارير.


Elisa Van Outrive 23 فبراير 2026
شارك هذا المنشور
تسجيل الدخول حتى تترك تعليقاً