تایپ‌ها


وقتی در فریمورک جنگو شروع به ساخت مدل‌های داده‌ای می‌کنیم، اولین و مهم‌ترین تصمیمی که باید بگیریم، انتخاب تایپ فیلد (Field Type) مناسب برای هر ستون داده است. فیلدها در جنگو نه‌تنها ساختار داده‌ها را در پایگاه داده مشخص می‌کنند، بلکه نحوه نمایش، اعتبارسنجی، ذخیره‌سازی و حتی رفتار در فرم‌ها و پنل ادمین را نیز تعیین می‌کنند. در این بخش، به بررسی تمامی انواع رایج و پیشرفته فیلدهای جنگو می‌پردازیم — از ساده‌ترین‌ها تا فیلدهای رابطه‌ای و سفارشی.

🔹 فیلدها چه نقشی دارند؟

در تعریف مدل اشاره شد که هر مدل (Model) یک کلاس پایتونی است که از django.db.models.Model ارث‌بری می‌کند. هر فیلد در این کلاس نیز، یک ویژگی (attribute) است که نمونه‌ای از یکی از کلاس‌های موجود در django.db.models را نگه می‌دارد — مثل CharField یا ForeignKey. این فیلدها ...

  • در زمان اجرای makemigrations و migrate به ستون‌های جدول در دیتابیس تبدیل می‌شوند.
  • در فرم‌های خودکار (ModelForm) و پنل ادمین، ویجت‌های مناسب را ایجاد می‌کنند.
  • اعتبارسنجی داده‌ها را بر اساس نوع و پارامترها انجام می‌دهند.
  • امکان اعمال محدودیت‌های دیتابیسی (مثل UNIQUE, NOT NULL) را فراهم می‌کنند.

انتخاب نوع صحیح فیلد، تأثیر مستقیمی بر کارایی، صحت داده‌ها و تجربه کاربری خواهد داشت.

🧱 دسته‌بندی کلی فیلدها

فیلدهای جنگو را می‌توان به چند دسته کلی تقسیم کرد:

  1. فیلدهای اسکالر (مقادیر ساده) — مثل متن، عدد، تاریخ
  2. فیلدهای رابطه‌ای — برای اتصال مدل‌ها به هم
  3. فیلدهای ساختاریافته و خاص — مثل فایل، تصویر، JSON
  4. فیلدهای عمومی و کمکی — مثل AutoField, GenericIPAddressField

در ادامه، هر دسته را به‌صورت جزء به جزء بررسی می‌کنیم.

فیلدهای اسکالر (Scalar Fields)


فیلدهای اسکالر، ساده‌ترین و رایج‌ترین نوع فیلدها هستند که مقادیر ساده را ذخیره می‌کنند — یعنی هر فیلد فقط یک مقدار ساده (مثل متن، عدد، تاریخ یا بولین) را نگه می‌دارد. این فیلدها مستقیماً به ستون‌های ساده در دیتابیس تبدیل می‌شوند.

الف) فیلدهای متنی:

  • CharField: برای رشته‌های کوتاه با طول مشخص (max_length اجباری است).
  • TextField: برای متن‌های بلند — بدون محدودیت طول.
  • EmailField: اعتبارسنجی ایمیل + محدودیت طول.
  • SlugField: برای URLها — فقط حروف، اعداد، خط تیره و زیرخط.
  • URLField: اعتبارسنجی آدرس اینترنتی.
 

ب) فیلدهای عددی:

  • IntegerField, BigIntegerField, SmallIntegerField: اعداد صحیح با دامنه‌های مختلف.
  • PositiveIntegerField, PositiveSmallIntegerField: فقط اعداد مثبت.
  • DecimalField: اعداد اعشاری با دقت بالا — مناسب امور مالی.
  • FloatField: اعداد اعشاری با دقت متوسط (با خطای گرد کردن).
 

ج) فیلدهای تاریخ و زمان:

  • DateField: فقط تاریخ (YYYY-MM-DD)
  • DateTimeField: تاریخ + زمان
  • TimeField: فقط زمان (HH:MM:SS)
 

د) فیلدهای بولین و انتخابی:

  • BooleanField: True/False
  • choices: برای محدود کردن مقادیر مجاز (مثلاً وضعیت‌ها)

 

فیلدهای رابطه‌ای (Relational Fields)


فیلدهای ساختاریافته و خاص (Structured & Specialized Fields)


فیلدهای عمومی و کمکی (Generic & Helper Fields)