تو پست قبلی با عنوان استفاده از UUID در مدل جنگو اومدیم و بجای ارث بری از models.Model از یک مدل دیگه به نام CommonModel ارث بری کردیم که قرار شد تو این مقاله توضیح بدم که چرا از این مدل ارث بری کردم.
موارد بالا از اون فیلد هایی هستن که تو همه مدل هامون تکرار میشن پس چیکار کنیم که بتونیم از تکرار کد جلوگیری و در کنارش از ارث بری استفاده کنیم تا بتونیم مثل یک برنامه نویس حرفه ای طراحی کنیم. جواب خیلی سادست یک بدل انتزاعی تعریف میکنیم و فیلد های پرتکرارمون رو توش قرار میدیم و از اون به بعد بجای ارث بری از 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
کلاس Status برای تععین وضعیت انتشار سطرمون هست
کلاس Visible برای تعیین وضعیت قابل مشاهه بودن سطرمون
حالا برای استفاده از این سطر ها در مدلمون کافیه بجای ارث بری از models.Model از مدل (CommonModel) انتزائی که ساختیم ارث بری کنیم تا سطر های موجود در CommonModel در دیتابیس مدلمون اضافه بشن.