آموزش مدل های انتزاعی در جنگو

April 2020

پیش نیاز: python abstract class

امروز میخوام در رابطه با modelهای abstract در جنگو براتون بگم.

یک زمانی هست که شما دارید مدل هاتون رو طراحی میکنید و بعد یهو متوجه میشید که یکسری از فیلدها و متدها تکراری هستش. اینجا میتونید از مدلها abstract استفاده کنید که کد کمتری بنویسید. مثال زیر رو ببینید:

class Student(models.Model):
    name = models.CharField(max_lenght=30)
    age = models.PositiveIntegerField()
    year = models.PositiveIntegerField()

    def __str__(self):
        return self.name

class Teacher(models.Model):
    name = models.CharField(max_lenght=30)
    age = models.PositiveIntegerField()
    major = models.CharField(max_length=30)
    
    def __str__(self):
        return self.name

در مثال بالا دوتا مدلی که داریم خیلی شبیه به هم هستند و کد تکراری زیادی نوشتیم که اصلا خوب نیست.

بجاش چیکار میکنید؟! میایید از مدل های abstract استفاده میکنید.

کد بالا رو به شکل زیر تغییر میدم:

class Common(models.Model):
    name = models.CharField(max_lenght=30)
    age = models.PositiveIntegerField()

    def __str__(self):
        return self.name

    class Meta:
        abstract = True

class Student(Common):
    year = models.PositiveIntegerField()

class Teacher(Common):
    major = models.CharField(max_length=30)

در کد بالا یک کلاس به اسم Common ساختم و تمام موارد تکراری رو داخلش نوشتم. و بعد به عنوان metadata مقدار abstract رو True قرار دادم. حالا بقیه کلاس ها میتونند از این کلاس به عنوان کلاس پایه استفاده کنن.

برای اطلاعات بیشتر ویدیو رو تماشا کنید

ارسال نظر

اگر قراره سوالی بپرسید که داخلش کد هست، بهتره از کدتون عکس بگیرید و به ایمیلی که پایین نوشتم بفرستید