متعرفش يعني إيه Context في Odoo؟ يبقى لسه مفتحتش الباب الحقيقي لقوة الفريم وورك ده!
الـ context في Odoo مش مجرد متغير إضافي بتمرره...
ده واحد من أهم الأدوات اللي بتخليك تتحكم في سلوك النظام من غير ما تغرق في تعقيدات الـ override أو تكسر الكود الحالي.
إزاي الـ Context بيغير قواعد اللعبة؟
تمرير معلومات إضافية بين الواجهات والـ backend
عايز تبعت قيمة معينة من الـ view علشان تتصرف بيها جوه ميثود؟
مثلاً: لما تفتح form من شجرة معينة، يتحط partner_id تلقائي؟ سطر context بسيط وهيظبط لك ده.
تحديد قيم افتراضية بشكل ديناميكي
من غير ما تكتب لوجيك داخل create، ببساطة:
<context="{'default_country_id': 64}" />
تغيير الدومين بشكل ذكي بناءً على الـ context
تخلي field يعرض قيم مختلفة حسب الشاشة اللي فاتح منها، أو حسب صلاحية المستخدم.
تقليل استخدام override
بدل ما تعمل override لـ create أو search، استخدم context وحدد السلوك المطلوب، خصوصاً لو بتشتغل على module generic وعايز تخليه flexible.
كتابة كود Clean, Modular, Reusable
أنت مش مضطر تكتب نفس الكود مرتين، طالما تقدر تتحكم بالـ context من الـ action أو الـ view
تمرير فلتر مخصص في الـ action:
<record id="action_custom_partner" model="ir.actions.act_window">
<field name="context">{'search_default_customer': 1}</field>
</record>
الموديل يفتح وفلتر العملاء مفعل تلقائيًا
استخدامه جوه Python:
def create(self, vals):
if self.env.context.get('from_invoice'):
# تنفيذ لوجيك مختلف لو جاي من فاتورة
vals['special_field'] = True
return super().create(vals)
Pro Tip:
الـ context بيتوارث تلقائيًا من view → method → method...
فممكن تبدأ تمرر قيمة من زرار أو action، توصل بيها لـ method داخلي في layer تانية وتتحكم بيها في السلوك كله.
الرسالة الأهم:
كل ما تتعمق في فهم الـ context، كل ما كودك يبقى أقوى، أذكى، وأسهل