ارث بری در مدل جنگو

ارث بری در مدل جنگو

تو پست قبلی با عنوان استفاده از UUID در مدل جنگو اومدیم و بجای ارث بری از models.Model از یک مدل دیگه به نام CommonModel ارث بری کردیم که قرار شد تو این مقاله توضیح بدم که چرا از این مدل ارث بری کردم.

 

چند تا فیلد هستن که ما همیشه تو همه مدل هامون قرارشون میدیم

  1. status برای تعین وضعیت انتشار اون سطر
  2. visible : تعیین وضعیت مشاهده سطر
  3. published_time: تعیین تاریخ انتشار سطر
  4. created_at: تعیین تاریخ ایجاد سطر
  5. update_at: تعیین تاریخ بروزرسانی سطر

موارد بالا از اون فیلد هایی هستن که تو همه مدل هامون تکرار میشن پس چیکار کنیم که بتونیم از تکرار کد جلوگیری و در کنارش از ارث بری استفاده کنیم تا بتونیم مثل یک برنامه نویس حرفه ای طراحی کنیم. جواب خیلی سادست یک بدل انتزاعی تعریف میکنیم و فیلد های پرتکرارمون رو توش قرار میدیم و از اون به بعد بجای ارث بری از  models.Model از مدل انتزائی که ساختیم ارث بری میکنیم.

خب دست بکار میشیم.

 

class CommonModel(models.Model):
    class Status(models.TextChoices):
        DRAFT = 'DR', 'پیش نویس'
        PENDING = 'PE', 'بررسی'
        PUBLISH = 'PU', 'منتشر'
        TRASH = 'TR', 'زباله'
        ARCHIVE = 'AR', 'آرشیو'

    class Visible(models.TextChoices):
        PUBLIC = 'PU', 'عمومی'
        PRIVATE = 'PI', 'خصوصی'
        PROTECTED = 'PO', 'محافظت'

    status = models.CharField(
        max_length=2, choices=Status.choices,
        default=Status.PUBLISH, verbose_name='وضعیت انتشار')
    visible = models.CharField(
        max_length=2,
        choices=Visible.choices,
        default=Visible.PUBLIC, verbose_name='قابلیت مشاهده')
    published_time = models.DateTimeField(null=True)
    created_at = models.DateTimeField(auto_now_add=True, verbose_name='ایجاد در')
    update_at = models.DateTimeField(auto_now=True, verbose_name='بروزرسانی در')

    # def __str__(self):
    #     return self.name

    class Meta:
        abstract = True
  1. من اینجا از نام CommonModel استفاده کردم ، شما هر نامی که میخواید استفاده کنید.
  2. دو کلاس با نام های Status و Visible استفاده کردم تا بتونم Enum های خودم رو ایجاد کنم.

    کلاس Status برای تععین وضعیت انتشار سطرمون هست 

    کلاس Visible برای تعیین وضعیت قابل مشاهه بودن سطرمون

  3. سایر فیلد ها به ترتیب برای تاریخ انتشار ، تاریخ ایجاد و تاریخ بروزرسانی سطر هامون هست
  4. حتما دقت کنید که در کلاس Meta مقدار abstract را برابر با True قرار بدید تا کلاس مدلمون به شکل انتزائی (قرار دادی) در بیاد.

حالا برای استفاده از این سطر ها در مدلمون کافیه بجای ارث بری از  models.Model از مدل (CommonModel) انتزائی که ساختیم ارث بری کنیم تا سطر های موجود در CommonModel در دیتابیس مدلمون اضافه بشن.

امتیاز شما به این مقاله ؟

5 \ None

برچسب ها

سایر مقالات

جنگو | جداکردن اعداد از هم

00/07/04 _ 03:20:07

جنگو | جداکردن اعداد از هم

برای جدا کردن سه رقم به سه رقم مبلغ از هم میتونید از پکیج humanize استفاده کنید فقط کافیه مراحل زیر رو دنبال کنید.   1-به فایل setting خود مراجعه کرده …

ادامه مطالعه

فرم ها در جنگو

00/06/13 _ 21:25:07

فرم ها در جنگو

فرم ها در جنگو چه کاربردی دارند و به چه روش هایی ایجا می شوند. در روت هر اپلیکیشن پروژه جنگویی میتونید یک فایل با نام forms.py ایجاد کنید تا …

ادامه مطالعه

تغییر نام نمایشی اپلیکیشن در جنگو

00/06/13 _ 21:27:10

تغییر نام نمایشی اپلیکیشن در جنگو

وقتی در جنگو با دستور ذیل اقدام به ساخت یک اپلیکیشن جدید میکنید نام نمایشی اون (در منو کناری پنل مدیریت و غیره) هم نام با نام خود اپلیکیشن و …

ادامه مطالعه

برای ثبت نظر لطفا وارد حساب کاربری خود شوید یا ثبت نام کنید.

نظرات