پارامترهای مشترک
تمام فیلدهای مدل در جنگو (مانند CharField
، IntegerField
، ForeignKey
و غیره) از مجموعهای از پارامترهای مشترک پشتیبانی میکنند. این گزینهها رفتار فیلد را در سطح پایگاه داده، فرمها، اعتبارسنجی و رابط کاربری ادمین کنترل میکنند. در ادامه، پرکاربردترین و مهمترین این گزینهها را بررسی میکنیم.
✺✳ ┅ null ┅ ✳✺
- نوع:
bool
- پیشفرض:
False
- کاربرد: تعیین میکند که آیا فیلد میتواند در پایگاه داده مقدار NULL را بپذیرد یا خیر.
اگر null=True
باشد، جنگو اجازه میدهد که این فیلد در پایگاه داده مقدار NULL
را بپذیرد. در غیر این صورت، فیلد اجباری در سطح پایگاه داده قلمداد خواهد شد و هر تلاشی برای ذخیره NULL
منجر به خطا میشود.
age = models.IntegerField(null=True)
CharField
، TextField
) معمولا از null=True
استفاده نمیگردد. به جای آن، از blank=True
و ذخیره رشتهٔ خالی (''
) استفاده میشود. چرا که در پایگاه داده، NULL
و رشته خالی دو مفهوم متفاوت هستند و ترکیب آنها میتواند منجر به پیچیدگی در کوئریها گردد و استاندارد جنگو پیشنهاد میکند برای فیلدهای متنی، فقط از رشته خالی استفاده شود.✺✳ ┅ blank ┅ ✳✺
- نوع:
bool
- پیشفرض:
False
- کاربرد: تعیین میکند که آیا فیلد میتواند در فرمها (و اعتبارسنجی جنگو) خالی باقی بماند یا خیر.
اگر blank=True
باشد، فیلد در فرمهای جنگو (از جمله ModelForm
و پنل ادمین) اختیاری در نظر گرفته میشود و کاربر میتواند آن را خالی بگذارد و در غیر اینصورت جنگو اجازه Submit
فرم را تا زمان پرکردن فیلد به کاربر نخواهد داد.
bio = models.TextField(blank=True)
null
و blank
در این است که null
مربوط به ذخیرهسازی در پایگاه داده است ولی blank
مربوط به اعتبارسنجی فرم است. این دو گزینه مستقل هستند و معمولاً هنگامی که یک فیلد هم در فرم اختیاری است و هم میتواند NULL
باشد، هر دو را فعال میکنند.
✺✳ ┅ choices ┅ ✳✺
- نوع:
Iterable
(مثل لیست یا تاپل) - کاربرد: محدود کردن مقادیر مجاز یک فیلد به یک مجموعه از گزینههای از پیش تعریفشده.
در ادمین پنل و فرمها، این فیلد به صورت Select
و options
نمایش داده میشود.
STATUS_CHOICES = [
('d', 'Draft'),
('p', 'Published'),
('w', 'Withdrawn'),
]
status = models.CharField(max_length=1, choices=STATUS_CHOICES)
'd'
، 'p'
و ...).✺✳ ┅ default ┅ ✳✺
- نوع: هر مقدار ثابت یا یک تابع قابل فراخوانی (callable)
- کاربرد: تعیین مقدار پیشفرض برای فیلد در صورتی که مقداری ارسال نشود.
active = models.BooleanField(default=True)
✺✳ ┅ help_text ┅ ✳✺
- نوع:
str
- کاربرد: نمایش یک متن راهنما در کنار فیلد در فرمها (مثلاً در ادمین پنل).
email = models.EmailField(help_text="Enter your valid mail address ...")
<span class="helptext">...</span>
رندر میشود و برای کاربران در رابط کاربری مفید بوده و در پایگاه داده تاثیری ندارد. ✺✳ ┅ primary_key ┅ ✳✺
- نوع:
bool
- پیشفرض:
False
- کاربرد: مشخص میکند که آیا این فیلد کلید اصلی (Primary Key) مدل باشد.
اگر primary_key=True
باشد، این فیلد به عنوان کلید اصلی مدل در نظر گرفته میشود.
id = models.UUIDField(primary_key=True, default=uuid.uuid4)
⚠️ هر مدل فقط یک فیلد میتواند primary_key=True
داشته باشد.
⚠️ اگر هیچ فیلدی به عنوان primary_key
تعریف نشود، جنگو بهصورت خودکار یک فیلد id
از نوع AutoField
اضافه میکند.
✺✳ ┅ unique ┅ ✳✺
- نوع:
bool
- پیشفرض:
False
- کاربرد: تضمین میکند که مقدار این فیلد در کل جدول منحصربهفرد باشد.
اگر primary_key=True
باشد، این فیلد به عنوان کلید اصلی مدل در نظر گرفته میشود.
email = models.EmailField(unique=True)
⚠️ در پایگاه داده، یک محدودیت انحصاری از نوع UNIQUE
ایجاد میشود.
⚠️ در صورت تلاش برای ذخیره مقدار تکراری، خطای IntegrityError
رخ میدهد.
✺✳ ┅ editable ┅ ✳✺
- نوع:
bool
- پیشفرض:
True
- کاربرد: تعیین میکند که آیا این فیلد در فرمهای خودکار جنگو (مثل ادمین پنل یا
ModelForm
) نمایش داده شود یا خیر.
اگر editable=False
باشد، این فیلد در فرمهای جنگو نمایش داده نمیشود.
id = models.UUIDField(primary_key=True, editable=False, default=uuid.uuid4)
⚠️ فیلدهای editable=False
در ادمین پنل دیده نمیشوند و در فرمها نیز شامل نمیشوند. اما همچنان در مدل و پایگاه داده وجود دارند و قابل دسترسی هستند.
✺✳ ┅ verbose_name ┅ ✳✺
- نوع:
str
- کاربرد: تعیین نام خوانا و انسانمحور برای فیلد (به جای نام متغیر).
در ادمین پنل و فرمها، نامی که برای verbose_name تعیین میشود، نمایش داده خواهد شد.
full_name = models.CharField("name", max_length=50)
full_name = models.CharField(max_length=50, verbose_name="name")
⚠️ اگر verbose_name
تعیین نگردد، جنگو، نام متغیر را با تبدیل _
به فاصله و و بزرگنویسی اول هر کلمه (full_name
→ Full name
) به عنوان نام پیشفرض استفاده میکند.
این گزینهها، ابزارهای قدرتمندی هستند که امکان طراحی مدلهایی دقیق، ایمن و کاربرپسند را فراهم میآورند. درک تفاوت بین null
و blank
، استفاده صحیح از choices
و default
، و بهکارگیری verbose_name
برای بهبود تجربه کاربری، از جمله بهترین روشهای توسعه با جنگو محسوب میشوند.