فیلدهای رابطهای (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