Mohssen A Mohssen نشر 20 فبراير 2022 أرسل تقرير نشر 20 فبراير 2022 لماذ يجب أن أستعمل abstract model في جانغو Django بدلًا من صنف عادي في بايثون، ما المشكلة في الكود التالي: class Post: title = models.CharField(...) def get_content(self): return self.content لماذا علي تحويله إلى الشكل التالي: class Post(models.Model): title = models.CharField(...) def get_content(self): return self.content class Meta: abstract = True ما الفرق بين الصنفين السابقين؟ وهل توجد حالات تجعلني أستعمل صنف بايثون عادي؟ اقتباس
1 Bassam Ahmed3 نشر 20 فبراير 2022 أرسل تقرير نشر 20 فبراير 2022 لا يمكن إستخدام الأسطر البرمجية بشكل مباشر حيثُ يجب إستخدامها هكذا : class Post(models.Model): title = models.CharField(...) def get_content(self): return self.content class Meta: abstract = True و ذلك لأن في Django يتم وراثة و تعريف كل متغير من مكتبات تم تثبيتها مُسبقاً في بيئة django مثال إذا حذفت models.Model فلن يعمل السطر البرمجي لأنه يجب تعريف لـ django كيف يجب عليه أن يتعامل مع ال models حتى يسهل التعامل معها و تطبيقها في قاعدة البيانات المستخدمه في settings.py أما عن abstract = True فهي تهدف لعدم تكرار جدول البيانات مره اخرى في قاعدة بيانات django أي على سبيل المثال : class School(models.Model): name = models.CharField(max_length=100) number = models.IntergerField() class Student(models.Model): name = models.CharField(max_length=100) Phone = models.IntergerField() # نلاحظ هنا أن الحقل name مكرر نلاحظ أن الحقل name مُكرر في النموذجين و لمنع كتابة الحقول بشكل متكرر دائماً يتم إنشاء نموذج منفرد مثل : class CommonInfo(models.Model): name = models.CharField(max_length=100) class Meta: abstract = True لاحظت إضافة abstract = True حيث يتم وراثة ذلك النموذج عند انشاء النماذج بعد ذلك كالتالي : class School(CommonInfo): number = models.IntegerField() class Student(CommonInfo): phone = models.IntegerField() و عند تطبيق الأمرين python manage.py makemigrations و الأمر python manage.py migrate سيتم إنشاء الحقل name كأن تم كتابته في النموذجين و لكن بالأصل قمنا بوراثته من class كما لاحظت أن ال class ورث من CommonInfo لتوريث كافة الحقول به لأي نموذج يتم إستدعاؤه به 1 اقتباس
السؤال
Mohssen A Mohssen
لماذ يجب أن أستعمل abstract model في جانغو Django بدلًا من صنف عادي في بايثون، ما المشكلة في الكود التالي:
لماذا علي تحويله إلى الشكل التالي:
ما الفرق بين الصنفين السابقين؟ وهل توجد حالات تجعلني أستعمل صنف بايثون عادي؟
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.