پارامترهای خاص


علاوه بر پارامترهای مشترکی مانند 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)  # "مقاله-سلام-دنیا"