پارامترهای خاص
علاوه بر پارامترهای مشترکی مانند null، blank و default که در بخش قبلی بررسی شدند، هر کدام از تایپهای فیلد در جنگو ممکن است گزینههای اختصاصی خود را نیز داشته باشد. و یا به عبارت دیگر، برخی گزینهها فقط برای فیلدهای خاصی معنا دارند و در تعریف آن فیلدها کاربرد دارند. برخی از این گزینهها اجباری هستند (مثل max_length در CharField) و برخی دیگر اختیاری اما مفید.. در ادامه، مهمترین فیلدهای پرکاربرد و گزینههای خاص آنها را مرور میکنیم.
✺✳ ┅ max_length ┅ ✳✺
- نوع:
int - فیلدها:
CharField,EmailField,SlugField,URLField,FileField,ImageField - اجباری: برای
CharFieldو زیرمجموعههایش - کاربرد: حداکثر تعداد کاراکترهای مجاز برای فیلد را تعیین میکند. در پایگاه داده، این مقدار به عنوان اندازه ستون
VARCHAR(n)استفاده میشود.
username = models.CharField(max_length=150)
website = models.URLField(max_length=500)
⚠️ برای FileField و ImageField، این گزینه حداکثر طول مسیر ذخیرهسازی فایل (path) را تعیین میکند و نه حجم فایل.
✺✳ ┅ max_digits و decimal_places ┅ ✳✺
- نوع:
int - فیلدها:
DecimalField - اجباری: برای
DecimalField - کاربرد:
max_digitsحداکثر تعداد ارقام مجاز (شامل ارقام قبل و بعد از ممیز) را مشخص کرده وdecimal_placesتعداد ارقام پس از ممیز را تعیین میکند.
price = models.DecimalField(max_digits=10, decimal_places=2) # e.g. 12345678.99
⚠️ هر دو گزینه برای DecimalField اجباری هستند و max_digits باید حتما بزرگتر از decimal_places باشد.
✺✳ ┅ auto_now و auto_now_add ┅ ✳✺
- نوع:
bool - پیشفرض:
False - فیلدها:
DateField,DateTimeField - اختیاری
- کاربرد: اگر
Trueباشد، درauto_nowهر بار که یک رکورد ویرایش شده و ذخیره گردد، به زمان فعلی، بروزرسانی میشود و برای ثبت زمان آخرین ویرایش (updated_at) کاربرد دارد، ولی درauto_now_addفقط هنگام ایجاد اولیه رکورد به زمان فعلی تنظیم شده و برای ثبت زمان ایجاد (created_at) بیشترین کاربرد را خواهد داشت
updated_at = models.DateTimeField(auto_now=True)
created_at = models.DateTimeField(auto_now_add=True)
⚠️ در صورت استفاده از
auto_now=True و یا auto_now_add=True، فیلد بهصورت خودکار editable=False خواهد بود.✺✳ ┅ on_delete ┅ ✳✺
- نوع:
models - فیلدها:
ForeignKey,OneToOneField,ManyToManyField - اجباری: برای فیلدهای رابطهای
- کاربرد: رفتار سیستم را هنگام حذف رکورد مقصد (related object) تعیین میکند.
-
مقادیر رایج:
models.CASCADE: حذف تمامی زنجیرهی رکوردهای وابسته.models.PROTECT: جلوگیری از حذف با خطایProtectedError.models.SET_NULL: تنظیم فیلد بهNULL(نیاز بهnull=Trueدارد).models.SET_DEFAULT: تنظیم به مقدار پیشفرض (نیاز بهdefaultدارد).
author = models.ForeignKey(User, on_delete=models.CASCADE)
✺✳ ┅ related_name ┅ ✳✺
- نوع:
str - فیلدها:
ForeignKey,OneToOneField,ManyToManyField - اختباری
- کاربرد: نامی که برای دسترسی معکوس از مدل مقصد به مدل مبدا استفاده میشود
class Article(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='articles')
⚠️ اگر
related_name='+' باشد، دسترسی معکوس غیرفعال میشود.✺✳ ┅ allow_unicode ┅ ✳✺
- نوع:
bool - فیلدها:
SlugField - اختیاری
- کاربرد: اگر
Trueباشد، اجازه استفاده از کاراکترهای غیر-لاتین (مثل فارسی، عربی، چینی) در اسلاگ را میدهد.
slug = models.SlugField(allow_unicode=True) # "مقاله-سلام-دنیا"