پارامترهای خاص
علاوه بر پارامترهای مشترکی مانند 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)
⚠️ این فیلد نیز بهصورت خودکار
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
- اجباری؟: برای
CharField
و زیرمجموعههایش - کاربرد: نامی که برای دسترسی معکوس از مدل مقصد به مدل مبدا استفاده میشود
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) # "مقاله-سلام-دنیا"