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


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

الف) 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)

🧩 می‌توان جدول واسط را خودتان تعریف کنید (through=) برای ذخیره اطلاعات اضافی در رابطه.

 

💡 کاربرد:

  • مدل‌سازی روابط معنادار بین موجودیت‌ها (مثل کاربر-سفارش، محصول-دسته‌بندی)
  • جلوگیری از تکرار داده و حفظ یکپارچگی داده‌ها (Data Integrity)
  • امکان پیمایش معکوس رابطه با related_name