ارث بری در مدل جنگو فریمورک جنگو
03 Khordad 1401
0 نظر
98 : 3
ارث بری در مدل جنگو

تو پست قبلی با عنوان استفاده از 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 در دیتابیس مدلمون اضافه بشن.

توسعه دهنده وب سایت با فریمورک های (اکسپرس جی اس و جنگو) و توسعه دهنده اندروید بصورت نیتیو

ابتدا وارد شوید یا ثبت نام کنید!

برای ثبت نظر، نقد ابتدا باید وارد شوید یا ثبت نام کنید.

Activity Logs

There are 2 new tasks for you in “AirPlus Mobile APp” project:
Added at 4:23 PM by
img
Meeting with customer
Application Design
img
img
A
In Progress
View
Project Delivery Preparation
CRM System Development
img
B
Completed
View
Invitation for crafting engaging designs that speak human workshop
Sent at 4:23 PM by
img
Task #45890merged with #45890in “Ads Pro Admin Dashboard project:
Initiated at 4:23 PM by
img
3 new application design concepts added:
Created at 4:23 PM by
img
New case #67890is assigned to you in Multi-platform Database Design project
Added at 4:23 PM by
Alice Tan
You have received a new order:
Placed at 5:05 AM by
img

Database Backup Process Completed!

Login into Admin Dashboard to make sure the data integrity is OK
Proceed
New order #67890is placed for Workshow Planning & Budget Estimation
Placed at 4:23 PM by
Jimmy Bold
سبد خرید