Форум сайта python.su
Имеется 3 таблицы: User, Phone, Subdivision и связующая таблица us_ph_sub. Все они связаны many-to-many отношениями.
User:
+–+———–+——-+————–+—–+
| id | surname | name | patronymic | info |
+–+———–+——-+————–+—–+
Phone:
+–+———-+
| id | number |
+–+———-+
Subdivision:
+–+—–+
| id | unit |
+–+—–+
Связующая таблица
us_ph_sub:
+———+———–+—————–+
| user_id | phone_id | subdivision_id |
+———+———–+—————–+
В моделях примерно следующее (models.py):
from app import db us_ph_sub = db.Table('us_ph_sub', db.Column('user_id', db.Integer,db.ForeignKey("user.id"), nullable=False), db.Column('phone_id', db.Integer,db.ForeignKey("phone.id"), nullable=False), db.Column('subdivision_id', db.Integer,db.ForeignKey("subdivision.id"), nullable=False) ) class User(db.Model): id = db.Column(db.Integer, primary_key = True) surname = db.Column(db.String(64), index = True) name = db.Column(db.String(64), index = True) patronymic = db.Column(db.String(64), index = True) info = db.Column(db.String(1024)) def __repr__(self): return '<User %r %r>' % (self.surname, self.name) class Phone(db.Model): id = db.Column(db.Integer, primary_key = True) number = db.Column(db.Integer, unique = True, nullable=False) def __repr__(self): return '<Number %r>' % (self.number) class Subdivision(db.Model): id = db.Column(db.Integer, primary_key = True) unit = db.Column(db.String(128), unique = True, nullable=False) def __repr__(self): return '<Unit %r>' % (self.unit)
Офлайн
Когда Вы создали связывающую таблицу, то Вам необходимо указать ее в relationship иначе откуда системе знать как эта таблица связана и с чем?
Вот тут приведен отличный пример
Смотрите внимательно на relationship и secondary в частности.
Если сложно понять то дайте полное описание:
Это - МТМ - Это - МТМ - Это.
Отредактировано 4kpt_III (Авг. 18, 2015 16:20:41)
Офлайн
Документацию я читал. Но не совсем все там понял. В частности там написано, что “Many to Many добавляет ассоциацию между двумя классами”. Все бы хорошо но у меня три класса и они связаны many to many. Например, 1 user может иметь несколько number и входить в несколько unit сразу. При этом у другого user может быть тот же number (или сразу несколько) и unit (или несколько). Примеры, где используется по 2 таблицы и третья для связывания я находил. А вот в своем случае не знаю как сделать
Офлайн
Ну так у Вас будет 2 таблицы-ассоциации. Связь user-number и связь user-unit.
Офлайн