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


این فیلدها برای ایجاد رابطه بین مدل‌ها استفاده می‌شوند و در پایگاه داده به صورت کلید خارجی (Foreign Key) یا جدول واسط (Intermediate Table) پیاده‌سازی می‌شوند. مدل‌های جنگو به طور پیش‌فرض از RDBMSها استفاده می‌کنند که روابط بین مدل‌ها رو پشتیبانی می‌کند. استفاده از روابط در پایگاه داده باعث بهبود عملکرد، جلوگیری از تکرار داده و ایجاد ساختار رابطه‌ای بین داده‌ها می‌شود.

 

الف) ForeignKey — رابطه یک به چند
    • یک رکورد در مدل A به چند رکورد در مدل B اشاره می‌کند. (مثال: یک نویسنده — چند مقاله)
    • on_delete اجباری است — تعیین می‌کند در صورت حذف رکورد والد چه اتفاقی بیفتد.

 

ب) OneToOneField — رابطه یک به یک
    • یک رکورد در مدل A فقط به یک رکورد در مدل B متصل است. (مثال: کاربر — پروفایل کاربری.)
 
ج) ManyToManyField — رابطه چند به چند
    • چند رکورد در مدل A به چند رکورد در مدل B متصل می‌شوند. (مثال: مقاله — تگ‌ها).

 

class Smaple(models.Model):
    author = models.ForeignKey('Author', on_delete=models.CASCADE)
    profile = models.OneToOneField('UserProfile', on_delete=models.CASCADE)
    tags = models.ManyToManyField('Tag', blank=True)

 

در بخش روابط مدل‌ها، به‌صورت مفصل و با جزئیات کاربردی به این مفهوم کلیدی خواهیم پرداخت که چگونه می‌توان با استفاده از فیلدهای رابطه‌ای جنگو — مانند ForeignKey، OneToOneField و ManyToManyField — ساختاری منسجم، پایدار و بدون تکرار داده طراحی کرد. این فیلدها نه‌تنها در سطح کد پایتون، بلکه در عمق پایگاه داده نیز با ایجاد کلیدهای خارجی یا جداول واسط، روابط معنادار بین موجودیت‌ها را پیاده‌سازی می‌کنند. هدف نهایی این است که از ذخیره‌سازی تکراری و غیرضروری داده‌ها جلوگیری شود و هر اطلاعاتی فقط در یک نقطه منحصربه‌فرد نگهداری شود — تا در صورت نیاز به به‌روزرسانی، تنها یک تغییر کافی باشد و تمام بخش‌های مرتبط به‌طور خودکار و بدون خطا بازتابی از آن تغییر ارائه دهند. این رویکرد، پایهٔ اصلی یکپارچگی داده‌ها (Data Integrity) و مقیاس‌پذیری سیستم است و درک عمیق آن، یک توسعه‌دهنده معمولی را به یک معمار داده حرفه‌ای تبدیل می‌کند.