سلام فیلدهای فیلدهای many2one و one2many و many2many دقیقا چیکار میکنن و چگونه با هم در ارتباط اند؟
2 پاسخ ها
فیلدهای چند به چند، چند به یک و یک به چند در اودوو ۱۶ ویراوب ۱۲۳ برای ایجاد ارتباطات بین دو مدل مختلف استفاده می شوند. این ارتباطات می توانند یک طرفه یا دو طرفه باشند. برای درک بهتر، به مثال های زیر توجه کنید امیدوارم برای شما مفید باشن:
• فیلد چند به یک (Many2one): این فیلد برای اتصال یک رکورد از مدل فعلی به یک رکورد از مدل دیگر استفاده می شود. به عبارت دیگر، هر رکورد از مدل فعلی می تواند فقط یک رکورد از مدل دیگر را به عنوان پدر یا مرجع داشته باشد. برای مثال، اگر ما یک مدل برای محصولات و یک مدل برای دسته بندی محصولات داشته باشیم، می توانیم یک فیلد چند به یک به نام category_id در مدل محصولات تعریف کنیم که به مدل دسته بندی محصولات اشاره می کند. این کد می تواند چنین باشد:
category_id = fields.Many2one('product.category', 'Category')
این کد یک فیلد چند به یک با نام category_id در مدل محصولات ایجاد می کند که به مدل product.category اشاره می کند و عنوان آن در رابط کاربری Category است.
• فیلد یک به چند (One2many): این فیلد برای ایجاد ارتباط دو طرفه بین دو مدل استفاده می شود. این فیلد در مدل پدر تعریف می شود و به مدل فرزند اشاره می کند. این فیلد می تواند چندین رکورد از مدل فرزند را در خود ذخیره کند. برای مثال، اگر ما یک مدل برای سفارشات و یک مدل برای خطوط سفارش داشته باشیم، می توانیم یک فیلد یک به چند به نام order_line_ids در مدل سفارشات تعریف کنیم که به مدل خطوط سفارش اشاره می کند. این کد می تواند چنین باشد:
order_line_ids = fields.One2many('order.line', 'order_id', 'Order Lines')
این کد یک فیلد یک به چند با نام order_line_ids در مدل سفارشات ایجاد می کند که به مدل order.line اشاره می کند و نام فیلد چند به یک متناظر در مدل فرزند order_id است. عنوان این فیلد در رابط کاربری Order Lines است.
• فیلد چند به چند (Many2many): این فیلد برای ایجاد ارتباط دو طرفه بین دو مدل استفاده می شود که هر کدام می توانند چندین رکورد از مدل دیگر را داشته باشند. برای مثال، اگر ما یک مدل برای کتاب ها و یک مدل برای نویسندگان داشته باشیم، می توانیم یک فیلد چند به چند به نام author_ids در مدل کتاب ها تعریف کنیم که به مدل نویسندگان اشاره می کند. این کد می تواند چنین باشد:
author_ids = fields.Many2many('book.author', 'Book Authors')
این کد یک فیلد چند به چند با نام author_ids در مدل کتاب ها ایجاد می کند که به مدل book.author اشاره می کند و نام جدول ارتباطی در پایگاه داده Book Authors است. عنوان این فیلد در رابط کاربری نیز Book Authors است.
فیلد many2one مثل ارتباط چندین اتاق با یک خانه است
مطابق تصویر یک خانه میتونه چندین اتاق داشته باشه . هر اتاق هم متعلق به یک خانه است.
فیلد one2many در واقع تو دیتابیس ساخته نمیشه ولی خروجیش محاسبه میشه و در دسترس ما قرار میگیره . و رابطه اون درست برعکس تصویر بالا است. فیلد one2many ارتباط بین یک خانه با چندین اتاق را نشا ن میده
فیلد many2many مثلا ارتباط بین چندین دانشگاه با چندین گروه آموزشی است.
هر دانشگاه میتونه چندین گروه آموزشی داشته باشه و هر گروه آموزشی میتونه تو چندین دانشگاه ارائه بشه. طبق مثال بالا دانشگاه شیراز دو گروه ریاضی و علوم را داره و دانشگاه تهران فقط گروه ریاضی را داره