текст перекладу
Я вивчаю Flask останні кілька тижнів і радий, що зрозумів концепції взаємозв'язків. Flask значно полегшив встановлення зв'язків між таблицями. Я вивчив один до одного (one-to-one) і один до багатьох (one-to-many) зв'язки. Тепер я хочу приділити час обговоренню зв'язків багато до багатьох (Many-to-Many) і як вони відрізняються від перших двох.
Для one-to-one зв'язок з'єднує одну одиницю з іншою одиницею. Його також називають "has one/belongs to" зв'язком. Зазвичай це id з однієї моделі, яке є зовнішнім ключем для іншої моделі. Один до багатьох працює так само, однак це вважається зв'язком "has many/belongs to". Це означає, що модель, що має зовнішній ключ, належить іншій моделі, і може бути кілька одиниць з моделі із зовнішнім ключем, що належать до однієї одиниці з іншої моделі. А що ж із Many-to-Many зв'язками? Де буде зберігатися зовнішній ключ?
Ключ до зв'язків багато до багатьох — це наявність ще однієї моделі, яка з'єднує дві інші моделі. Це називається асоціативним об'єктом. У проекті, над яким я працюю, є дві моделі: User і Events. Користувач може мати багато подій, а подія може мати багато користувачів. Я створив ще один клас, який називається Purchase, щоб з'єднати ці дві моделі.
Дві моделі (User та Events) з'єднані іншою моделлю (Purchase)
Перше, що потрібно зробити, це додати зовнішній ключ у класі Purchase. Це дозволить визначити об'єкти у наших моделях User та Event. Наступний крок — додати зв'язки, щоб зробити це з'єднання.
Зовнішній ключ та зв'язки додано
Зв'язки також потрібно додати до інших класів, які будуть підключені до класу Purchase.
Зв'язки додано до двох класів, що з'єднуються
Наприкінці додаються правила серіалізації, щоб уникнути рекурсії. В іншому випадку буде безперервний цикл, оскільки підключений об'єкт (користувач) матиме під собою purchases, що призведе до нової групи об'єктів (подій).
Два класи з правилами серіалізації
Клас Purchase з правилами серіалізації
Це приклад get запиту, що показує користувача, у якого є покупки та події, пов'язані з цими покупками.
Приклад get запиту
Висновок:
Пройшовши ці кроки, я зміг реалізувати зв'язок багато до багатьох, який я зміг використати в моєму проекті.
Перекладено з: Many-to-Many Relationship in Flask