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


این فیلدها برای ذخیره داده‌های مرکب، باینری یا رسانه‌ای طراحی شده‌اند. برخلاف فیلدهای اسکالر، این فیلدها ممکن است شامل چند بخش باشند یا نیاز به پردازش خاصی (مثل آپلود فایل یا تجزیه JSON) داشته باشند.

الف) FileField و ImageField

  • برای آپلود فایل و تصویر.
  • نیاز به تنظیم MEDIA_URL و MEDIA_ROOT دارند.
  • ImageField نیازمند کتابخانه Pillow است.

 

ب) JSONField

  • برای ذخیره داده‌های JSON — بسیار منعطف.
  • پشتیبانی از کوئری‌های داخل JSON در دیتابیس‌های مدرن (مثل PostgreSQL).
  • مناسب برای: تنظیمات پویا، لاگ‌های ساختاریافته، داده‌های متغیر بین رکوردها.
 

ج) ArrayField (فقط در PostgreSQL)

  • ذخیره لیستی از مقادیر
  • مثال: لیست تلفن‌های یک کاربر.
  • فقط در PostgreSQL پشتیبانی می‌شود.
 
class Smaple(models.Model):
    avatar = models.ImageField(upload_to='avatars/')
    resume = models.FileField(upload_to='resumes/')
    metadata = models.JSONField(default=dict)
    phones = models.ArrayField(models.CharField(max_length=10))
 

د) HStoreField (فقط در PostgreSQL — قدیمی‌تر)

  • ذخیره داده‌های key-value — جایگزین قدیمی‌تر برای JSONField.