Zeina Almakdisi نشر 5 نوفمبر 2022 أرسل تقرير نشر 5 نوفمبر 2022 مرحبا لدي كلاس اب Center class Center(models.Model): user = models.OneToOneField(User , verbose_name=_("user"), on_delete=models.CASCADE) name =models.CharField(_("Name:"),max_length=50) subtitle =models.CharField(_("Who_II:"),max_length=50) address =models.CharField(_("Address:"),max_length=50) address_detial=models.CharField(_("address_detial:"),max_length=50) number_phone =models.CharField(_("number_phone:"),max_length=50,unique=False) who_I =models.TextField(_("Who I"),max_length=250, unique=True) احتاج الى جعل جميع الكلاسات ان ترث منه مثلا جعل كلاس clinic يرث من Center class Clinic(models.Model): name_doctor =models.CharField(_("Name_Doctor:"),max_length=50) working_hours =models.CharField(_("working_hours:"),max_length=50,unique=False) waiting_time =models.IntegerField(_("waiting_time"), unique=True) price =models.IntegerField(_("Price is"), unique=True) slug =models.SlugField(_("slug") ) 2 اقتباس
0 مسعود زاهي نشر 5 نوفمبر 2022 أرسل تقرير نشر 5 نوفمبر 2022 مرحبا زينة، الوراثة ( Inheritance ) في جانغو أو في بايثون هي تضمين محتوى كلاس في كلاس آخر. في بايثون, الصنف يمكنه أن يرث من صنف آخر حتى يحصل على الدوال و المتغيرات الموجودة فيه. لجعل الصنف يرث من صنف آخر, نضع بعد إسم الصنف قوسين و بداخلهما إسم الصنف الذي نريده أن يرث منه. في حال كان الصنف يرث من أكثر من صنف, يجب وضع فاصلة بين كل صنفين نضعهما بين القوسين. مثال على ذلك: # print_msg و دالة إسمها x يحتوي على متغير إسمه A هنا قمنا بتعريف صنف إسمه class A: x = 10 def print_msg(self): print('Hello from class A') # y و يحتوي على متغير إسمه A يرث من الصنف B هنا قمنا بتعريف صنف إسمه class B(A): y = 20 يعني حتى نجعل الصنف Clinic يرث من الصنف Center نقوم ب: class Clinic(Center): name_doctor =models.CharField(_("Name_Doctor:"),max_length=50) working_hours =models.CharField(_("working_hours:"),max_length=50,unique=False) waiting_time =models.IntegerField(_("waiting_time"), unique=True) price =models.IntegerField(_("Price is"), unique=True) slug =models.SlugField(_("slug") ) للإستزادة أكثر حول الوراثة في بايثون يمكنك قراءة مقالة: أو زيارة موسوعة حسوب. تحياتي، 1 اقتباس
0 Kais Hasan نشر 5 نوفمبر 2022 أرسل تقرير نشر 5 نوفمبر 2022 في دجانغو هناك عدة أنواع من الوراثة، حيث أن ال model يختلف عن الصف العادي بأنه يمثل جدول في قاعدة البيانات، بالتالي هناك عدة خيارات لدينا. الوراثة المجردة في حال أردنا كتابة صف مشترك و لكن لا نريد إنشاء جدول لذلك الصف، أي نقوم بكتابته لوضع صفات مشتركة و إضافتها إلى صفوف الأبناء (و بالتالي إلى الجدول الخاص بالابن في حال كان لديه واحد). أي مثلاً في حالتك قد لا تريدين وجود جدول خاص للصف Center فيمكنك إضافة ما يلي إليه: class Center(models.Model): # الكود الخاص بك # كيفية تحقيق ما سبق و شرحته class Meta: abstract = True الوراثة متعددة الجداول في حال كان يجب للصف الأب أن يكون له جدول خاص به فيمكننا كتابة وراثة عادية للصفوف في بايثون و هذا سيجعل دجانغو ينشئ جدول لكل صف. وراثة الوسيط النمط الثالث يدعى الوسيط proxy حيث يمكن إنشاء صف ابن يرث صف أب، بحيث يكون للصف الأب جدول بينما لا يكون للصف الابن جدول، و هنا دور الابن مجرد إضافة طرائق معينة للتعامل مع الجدول الذي يملكه الصف الأب. أي الابن مجرد وسيط يمكن عن طريق تنفيذ تعليمات تنفذ على الجدول الخاص بالصف الأب. نقوم عادة باستعمال هذا النوع من الوراثة في حال كنا مهتمين بإضافة طرائق خاصة للتعامل مع البيانات إلى صف ما، بحيث تكون هذه الطرق معرفة فقط في الصف الابن ( أي لا نريدها أن تكون متوفرة لمن يتعامل مع الصف الأب مباشرة). مثال على ذلك: from django.db import models class Person(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30) class MyPerson(Person): class Meta: proxy = True def do_something(self): # ... pass هنا من يتعامل مع الصف Person مباشرة لن يستطيع استعمال الدالة do_something بينما من يتعامل مع الصف MyPerson يستطيع، و كلاهما يتعاملان مع نفس الجدول، و الذي هو جدول مرتبط بالصف الأب Person. في هذا النمط يمكن فقط إضافة توابع للتعامل مع البيانات في الجدول الأب و ليس من المسموح إضافة صفات إضافية، حيث أن ذلك ممكن فقط في حال كان للابن جدول خاص به، و هنا الأمر ليس كذلك. 1 اقتباس
السؤال
Zeina Almakdisi
مرحبا لدي كلاس اب Center
class Center(models.Model): user = models.OneToOneField(User , verbose_name=_("user"), on_delete=models.CASCADE) name =models.CharField(_("Name:"),max_length=50) subtitle =models.CharField(_("Who_II:"),max_length=50) address =models.CharField(_("Address:"),max_length=50) address_detial=models.CharField(_("address_detial:"),max_length=50) number_phone =models.CharField(_("number_phone:"),max_length=50,unique=False) who_I =models.TextField(_("Who I"),max_length=250, unique=True)
احتاج الى جعل جميع الكلاسات ان ترث منه
مثلا جعل كلاس clinic يرث من Center
class Clinic(models.Model): name_doctor =models.CharField(_("Name_Doctor:"),max_length=50) working_hours =models.CharField(_("working_hours:"),max_length=50,unique=False) waiting_time =models.IntegerField(_("waiting_time"), unique=True) price =models.IntegerField(_("Price is"), unique=True) slug =models.SlugField(_("slug") )
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.