Зв’язок багато до багатьох у Flask

текст перекладу

Я вивчаю 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, щоб з'єднати ці дві моделі.

pic

Дві моделі (User та Events) з'єднані іншою моделлю (Purchase)

Перше, що потрібно зробити, це додати зовнішній ключ у класі Purchase. Це дозволить визначити об'єкти у наших моделях User та Event. Наступний крок — додати зв'язки, щоб зробити це з'єднання.

pic

Зовнішній ключ та зв'язки додано

Зв'язки також потрібно додати до інших класів, які будуть підключені до класу Purchase.

pic

Зв'язки додано до двох класів, що з'єднуються

Наприкінці додаються правила серіалізації, щоб уникнути рекурсії. В іншому випадку буде безперервний цикл, оскільки підключений об'єкт (користувач) матиме під собою purchases, що призведе до нової групи об'єктів (подій).

pic

Два класи з правилами серіалізації

pic

Клас Purchase з правилами серіалізації

Це приклад get запиту, що показує користувача, у якого є покупки та події, пов'язані з цими покупками.

pic

Приклад get запиту

Висновок:

Пройшовши ці кроки, я зміг реалізувати зв'язок багато до багатьох, який я зміг використати в моєму проекті.

Перекладено з: Many-to-Many Relationship in Flask

Leave a Reply

Your email address will not be published. Required fields are marked *