رابطه چند به چند - ManyToMany
در این نوع رابطه چند رکورد از یک مدل میتواند با چندین رکورد از مدل دیگر مرتبط باشند. برای مثال یک پروژه در وبسایت بر مبنای بستر پیادهسازی آن پروژه، میتواند چندین برچسب یا تگ از جمله Python، React و ... داشته باشد و همینطور یک برچسب نیز میتواند متعلق به چندین پروژه باشد.
در واقع برای این نوع رابطه، در سمت پایگاه داده، فرآیندی که اتفاق میافتد به این صورت میباشد که یک جدول میانی توسط جنگو هنگام تعریف گزینه ManyToMany بهصورت خودکار ایجاد شده و هربار که یک تگ به یک پروژه اختصاص مییابد، جنگو یک رکورد به جدول میانی از رابطه ایجاد شده اضافه میکند.
برای استفاده از رابطه ManyToMany در مدلهای جنگو باید از فیلد ManyToManyField استفاده کرد و این فیلد رابطه چند به چند را خواهد ساخت، چون خصوصیت تگ در مدل پروژه وجود دارد، ما این فیلد را در مدل projects قرار خواهیم داد.
پس از ایجاد مدل tag، حال میبایست نسبت به تعریف فیلد ManyToMany در مدل projects اقدام کنیم
نکته: ذکر این نکته حائز اهمیت میباشد که بعد از ایجاد و یا انجام هر تغییری در ساختار مدلها، میبایست دستورات makemigrations و سپس migrate را اجرا کنیم تا تغییرات در پایگاه داده نیز اعمال شوند؛ و همچنین بعد از ایجاد هر مدل، میبایست نسبت به ثبت آن در اینترفیس ادمین از مسیر فایل admin.py از داخل دایرکتوری اپ اقدام کرد:
coreapp/admin.py
حال که تمامی مراحل فرایند ایجاد، تغییر و ثبت مدلها را طی کردیم، نگاهی به نحوه عملکرد فیلد ManyToMany تعریف شده در مدل projects خواهیم انداخت. قبل از انجام آن میبایست چند آیتم در جدول tag اضافه کنیم تا درک بهتری از نحوه عملکرد داشته باشیم.
در اینجا لیستی از تگها به جدول tag اضافه کردیم. حال اگر به سراغ آیتمهای مدل projects برویم، فیلد tags ایجاد شده به این صورت خواهد بود.