ستوفر هذه الوحدة القدرة على تمرير مفتاح سياق إلى نموذج إنشاء أو كتابة ، مما يؤدي إلى تشغيل جميع التغييرات المرتبطة للحقول التي تم تمريرها في الوسيطة data
.
سيبدو الاستخدام كالتالي:
record.with_context(do_onchange=True).write(data)
# OR
model.with_context(do_onchange=True).create(data)
سيكون هذا مفيدًا بشكل لا يصدق لإنشاء مجموعات سجلات معقدة من السهل جدًا إنشاؤها من خلال واجهة المستخدم نظرًا للتغييرات التي تحدث. وخير مثال على ذلك هو تكوين المبيعات ، أو sale.order
نفسه.
في الوقت الحالي ، أشعر بالحيرة قليلاً بشأن كيفية القيام بذلك. أعتقد أن القطعة المفقودة هي نوع من الأسلوب المركزي لإحداث تغييرات في نموذج يعتمد على قائمة الحقول أو شيء من هذا القبيل. هل يعرف أي شخص أي شيء من هذا القبيل؟
يارب احفظها
تحتاج إلى تحديد حقل (حقول) البداية التي ستؤدي إلى تشغيل بقية التغييرات.
مرحبًا @ Lasley ،
شكرا جزيلا على الفكرة وكتابتها!
هناك بعض المواقف التي يمكن أن يكون فيها هذا أمرًا ذا قيمة (مثل إعدادات المبيعات في Odoo V11 كما ناقشنا).
ترقب هذا واحد.
pedrobaeza - أنت تقول أن هذا يحدث بالفعل في الواجهة الخلفية طالما أن الحقول محددة؟ هل من المحتمل أن تكون جميع الحقول في التغيير بحاجة إلى تعريف؟
في الأساس إذا:
@api.onchange('a_field', 'b_field')
ثم
model.create({'a_field': 'a', 'b_field': 'b'})
ستنجح ، ولكن ليس:
model.create({'a_field': 'a'})
# OR
model.create({'b_field': 'b'})
السبب الذي أطلبه هو أنني أرى تطبيقًا غير متسق بشكل لا يصدق لهذا المنطق.
لا ، أنا لا أقول أن هذا يحدث بالفعل. ما أقوله أنك بحاجة إلى تحديد ما هي قيمة (قيم) الحقول التي تبدأ سلسلة التغييرات. شيء مثل:
record.with_context(do_onchange=['field_a', 'field_b']).write(data)
يا للاهتمام ، كنت أفكر في مجرد استخدام المفاتيح الموجودة في البيانات نفسها. قم ببساطة بتجاوز الطرق create
و write
، ثم قم بإجراء عملية التغيير إذا كانت المفاتيح موجودة.
سيسمح تصميمك للمطور بتقييد التغييرات فعليًا ، أو تشغيلها يدويًا حتى إذا كانت البيانات لا تحتوي على المفتاح. هذا يبدو وكأنه موقف "لماذا لا"؟
هل لديك أي فكرة عما إذا كان هناك نوع من آلية تحديد الهوية المركزية يمكننا الارتباط بها لهذا الغرض؟ لقد بحثت في النموذج الأساسي ولم أتمكن من العثور على أي شيء مميز. @
تخيل أنك مررت القيم التالية في أمر بيع: partner_id
و fiscal_position_id
. أرى عدة مشاكل:
partner_id
هو البادئ ، يمكنك استدعاء _onchange_fiscal_position_id
ثم _onchange_partner_id
، وهو ليس الترتيب الصحيح._onchange_partner_id
بتعديل fiscal_position_id
، لذا يجب عليك الاتصال بعد _onchange_fiscal_position_id
.fiscal_position_id
، فهل هذا لأنك تريد هذا المنصب المحدد؟ ثم يجب عليك تجاوز القيمة التي تحصل عليها عند التغيير الأول لتمريرها إلى التغييرات المتتالية. أم تريد تجاوزه؟lasley ، يمكنك تمديد الملحق 'onchange_helper' https://github.com/OCA/server-tools/tree/10.0/onchange_helper
Welp هذا رائع ، شكرًا لك lmignon ، لست متأكدًا كيف فاتني ذلك!
أعتقد في الواقع أن هذا تطبيق أفضل الآن بعد أن نظرت إليه. من خلال فكرتي ، فإننا نضيف النفقات العامة لبيان if في كل إنشاء / كتابة ، ولكن مع هذه العبارة لا نفعل ذلك. كلاهما يتطلب نفس القدر من الشفرة للاستخدام أيضًا ، لذا فائز واضح تمامًا.
أعتقد أنه ربما سأقوم بلمس الجزء التمهيدي قليلاً على الآخر. أعتقد أن كلمة play
هي التي دفعتني للخسارة.
التعليق الأكثر فائدة
lasley ، يمكنك تمديد الملحق 'onchange_helper' https://github.com/OCA/server-tools/tree/10.0/onchange_helper