يتيح لك الوراثة إعادة استخدام التعليمات البرمجية وإنشاء نماذج بيانات أنظف. لكن Django يقدم أكثر من طريقة للوراثة ، لذا تأكد من معرفة الاختلافات.
وراثة النموذج هي إحدى ميزات Django ORM التي تسمح للمطورين بإنشاء علاقات هرمية بين نماذج قواعد البيانات. إنه يمكّن من إعادة استخدام الكود ، وقابلية التوسع ، وقاعدة كود أكثر وضوحًا من خلال الاستفادة من مبادئ البرمجة الموجهة للكائنات.
سواء كنت تقوم ببناء تطبيق ويب معقد أو تعمل في مشروع أصغر ، يمكن أن توفر وراثة النموذج مزايا كبيرة ، مثل تقليل التكرار وضمان سلوك ثابت.
أنواع الوراثة النموذجية في Django
يقدم Django الدعم لثلاثة أنواع من وراثة النماذج:
- فئات قاعدة مجردة.
- الوراثة متعددة الجداول.
- نماذج الوكيل.
كل نوع من أنواع وراثة النماذج هذه له فوائد وستستخدمها لأغراض محددة.
فئات قاعدة مجردة
توفر الفئات الأساسية المجردة طريقة لتحديد الحقول والأساليب المشتركة التي يمكن أن ترثها نماذج متعددة. على سبيل المثال ، إذا كان لديك نموذجان يشتركان في حقول متشابهة ، يمكنك استخدام فئة أساسية مجردة لتحديد الحقول المتشابهة. الق نظرة على هذا المثال:
فصلعميل(عارضات ازياء. نموذج):
الاسم = النماذج. CharField (أقصى طول =50)
البريد الإلكتروني = النماذج. حقل البريد الإلكتروني ()
customer_id = النماذج. IntegerField ()
فصلتاجر(عارضات ازياء. نموذج):
الاسم = النماذج. CharField (أقصى طول =50)
البريد الإلكتروني = النماذج. حقل البريد الإلكتروني ()
معرف البائع = النماذج. IntegerField ()
يحدد مقتطف الشفرة أعلاه نموذجين من طراز Django: عميل و تاجر. تشترك هذه النماذج في مجالين مشتركين ، وهما اسم و بريد إلكتروني. لمنع هذا التكرار ، يمكنك إنشاء نموذج منفصل لاحتواء الحقول المشتركة في ملف عميل و تاجر النماذج وتجعلها مجردة.
فصلمعلومات المستخدم(عارضات ازياء. نموذج):
الاسم = النماذج. CharField (أقصى طول =50)
البريد الإلكتروني = النماذج. حقل البريد الإلكتروني ()
فصلميتا:
مجردة = حقيقي
يحدد مقتطف الشفرة أعلاه نموذجًا جديدًا ويعين ملف خلاصة يعزو إلى حقيقي. هذا يعني أن النموذج سيكون مجردًا ، ولن يقوم Django بإنشاء جدول في قاعدة البيانات.
يمكنك إعادة كتابة ملف عميل و تاجر نماذج مثل هذا:
فصلعميل(معلومات المستخدم):
customer_id = النماذج. IntegerField ()
فصلتاجر(معلومات المستخدم):
معرف البائع = النماذج. IntegerField ()
في مقتطف الشفرة أعلاه ، ملف عميل و الباعة ترث النماذج من معلومات المستخدم نموذج بدلا من عارضات ازياء. نموذج.
يمكنك عرض النماذج الخاصة بك في لوحة الإدارة عن طريق تسجيلها في ملف admin.py ملف مثل هذا:
من .عارضات ازياء يستورد العميل ، البائع
admin.site.register (العميل)
admin.site.register (البائع)
قم بترحيل أوضاعك وابدأ خادم التطوير الخاص بك عن طريق تشغيل ما يلي على ملف سطر الأوامر:
python manager.py makemigrations \
&& python management.py الترحيل \
&& python manager.py runserver
انتقل إلى موقع المسؤول الخاص بك وقم بتسجيل الدخول باستخدام تفاصيل المستخدم المتميز الخاص بك. يجب أن تشاهد الحقول الثلاثة لكل نموذج.
في هذا المثال ، أنشأ Django جدولًا لـ عميل و تاجر عارضات ازياء. يمكنك أن ترى أن ملف معلومات المستخدم النموذج ليس له جدول لأنه مجرد.
الوراثة متعددة الجداول
يمكنك استخدام التوريث متعدد الجداول عندما يحتاج النموذج الأصلي أيضًا إلى التواجد كجدول في قاعدة البيانات جنبًا إلى جنب مع النموذج الفرعي.
على عكس وراثة الفئة الأساسية المجردة ، حيث لن يكون النموذج الأصلي جدولًا في قاعدة البيانات ، فإن الوراثة متعددة الجداول تنشئ جدولًا للنموذج الأصل.
في الوراثة متعددة الجداول ، يرث النموذج الفرعي جميع الحقول والأساليب من النموذج الأصلي ويضيف الحقول المحددة الخاصة به. مفاتيح خارجية تساعد في إنشاء علاقة النموذج بين نماذج الوالدين والطفل.
فيما يلي مثال على الوراثة متعددة الجداول:
فصلشخص(عارضات ازياء. نموذج):
FIRST_NAME = النماذج. CharField (أقصى طول =100)
last_name = النماذج. CharField (أقصى طول =100)defget_name(الذات):
يعودF"{self.first_name}{self.last_name}"فصلميتا:
مجردة = حقيقيفصلموظف(شخص):
معرف_الموظف = النماذج. CharField (أقصى طول =20)
القسم = النماذج. CharField (أقصى طول =100)
الراتب = النماذج. فلوتفيلد ()
dob = النماذج. DateField ()
فصلمدير(موظف):
العنوان = النماذج. CharField (أقصى طول =100)
يحدد مقتطف الشفرة هذا ثلاثة نماذج. النموذج الأول يسمى شخص، مجردة. يحدد فقط الاسم الأول والأخير للشخص.
النموذج الثاني يسمى موظفيرث حقول شخص لكنه يحدد مجالات إضافية. ال موظف النموذج ليس مجردًا ، لذلك سيكون له جدوله في قاعدة البيانات.
النموذج النهائي يسمى مديريرث حقول موظف نموذج ويضيف حقل يسمى عنوان.
العلاقة بين موظف و مدير نماذج تسمى الوراثة متعددة الجداول. قم بترحيل النماذج الخاصة بك ، قم بتسجيلها في admin.py، وابدأ الخادم الخاص بك ، وانتقل إلى لوحة الإدارة. يجب أن ترى جدولين تم إنشاؤهما بواسطة Django.
عندما تحاول إضافة مدير جديد ، ستلاحظ أنه يحتوي على جميع الحقول من موظف النموذج بالإضافة إلى مجاله المخصص.
نماذج الوكيل
يساعدك نموذج الوكيل في إنشاء نموذج جديد يمتد من نموذج موجود دون إنشاء جدول قاعدة بيانات جديد. في هذا النوع من وراثة النموذج ، سيشترك الوكيل والنماذج الأصلية في نفس الجدول. باستخدام نماذج الوكيل ، يمكنك القيام بأشياء مثل إنشاء نماذج مخصصة وتغيير المديرين الافتراضيين.
يمكنك إنشاء نموذج وكيل عن طريق إضافة الوكيل = صحيح في ال ميتا فصل. هذا مثال:
فصلProxyModel(نموذج القاعدة):
فصلميتا:
الوكيل = حقيقي
يعد الاستخدام النموذجي للنموذج الوكيل مناسبًا عند وجود نموذج أساسي وهناك حاجة لإنشاء نسخة متخصصة منه بوظائف إضافية. إليك مثال أساسي:
فصلبريد(عارضات ازياء. نموذج):
العنوان = النماذج. CharField (أقصى طول =30)
المؤلف = النماذج. CharField (أقصى طول =30)def__str__(الذات):
يعود العنوان الذاتيفصلProxyPost(بريد):
فصلميتا:
الوكيل = حقيقي
يحدد مقتطف الشفرة هذا نموذجين: بريد و منشوري. ال بريد نموذج يحدد حقلين للعنوان والمؤلف. ال ProxyPost يرث النموذج من بريد نموذج.
قم بترحيل النماذج المذكورة أعلاه وإضافة منشور جديد إلى الجدول الذي تم إنشاؤه لـ بريد نموذج.
بعد إضافة المنشور ، افتح ملف مشاركات الوكيل طاولة. يجب أن تجد المنشور الذي أضفته إلى بريد الجدول فيه.
التغييرات التي تجريها على المشاركات في مشاركات الوكيل سيؤثر الجدول على المنشور المقابل في بريد الجدول والعكس صحيح. هذا يثبت أنهما يشتركان حقًا في نفس الجدول.
يمكنك تعديل ملف شارع() طريقة النموذج الوكيل:
فصلProxyPost(بريد):
فصلميتا:
الوكيل = حقيقي
الطلب = ["عنوان"]
def__str__(الذات):
يعود الكاتب
مع هذا التعديل ، أ ProxyPost's سيكون تمثيل السلسلة هو مؤلفها ، وليس العنوان. سيكون ترتيب نموذج الوكيل أيضًا حسب العنوان بدلاً من حقل المعرف الافتراضي.
عند استخدام نماذج الوكيل ، يجب أن تضع في اعتبارك أنه لا يمكنك إضافة حقول مخصصة إلى نموذج الوكيل الخاص بك. حالة الاستخدام الأساسية لنماذج الوكيل هي عندما تريد نموذجًا واحدًا يدعم سلوكيات متعددة.
تساعدك نماذج الوكيل على تغيير سلوك نموذج موجود دون تعديل حقوله أو هيكل جدول قاعدة البيانات الأساسي.
استخدم الوراثة النموذجية لإعادة استخدام الكود والهيكل التنظيمي
من خلال استخدام التقنيات المختلفة لتوريث النموذج ، يمكنك بسهولة إنشاء رمز قابل لإعادة الاستخدام ومنظم لمشروعك.
تتجنب وراثة النموذج التعليمات البرمجية الزائدة عن الحاجة وتعزز قابلية الصيانة وقابلية التوسع في التعليمات البرمجية الخاصة بك. كما أنه يجعل من السهل التنقل في التعليمات البرمجية الخاصة بك ، وبالتالي تعزيز التعاون الفعال بين فرق التطوير.
بصرف النظر عن وراثة النموذج ، يقدم Django وراثة القوالب ، وهي طريقة رائعة لإدارة وتنظيم القوالب لمشاريعك.