Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 18, 2015 14:14:29

jhoncool
Зарегистрирован: 2015-08-18
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask-sqlalchemy many-to-many relationship

Имеется 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)

Если кто знает как правильно связать эти таблицы, напишите пожалуйста. Выборки в итоге должны получаться:
1) по подразделениям (Subdivision)
2) по телефону (Phone)
3) по имени, или фамилии, или отчеству

Офлайн

#2 Авг. 18, 2015 15:40:29

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Flask-sqlalchemy many-to-many relationship

Когда Вы создали связывающую таблицу, то Вам необходимо указать ее в relationship иначе откуда системе знать как эта таблица связана и с чем?

Вот тут приведен отличный пример

Смотрите внимательно на relationship и secondary в частности.

Если сложно понять то дайте полное описание:
Это - МТМ - Это - МТМ - Это.

Отредактировано 4kpt_III (Авг. 18, 2015 16:20:41)

Офлайн

#3 Авг. 18, 2015 16:33:42

jhoncool
Зарегистрирован: 2015-08-18
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask-sqlalchemy many-to-many relationship

Документацию я читал. Но не совсем все там понял. В частности там написано, что “Many to Many добавляет ассоциацию между двумя классами”. Все бы хорошо но у меня три класса и они связаны many to many. Например, 1 user может иметь несколько number и входить в несколько unit сразу. При этом у другого user может быть тот же number (или сразу несколько) и unit (или несколько). Примеры, где используется по 2 таблицы и третья для связывания я находил. А вот в своем случае не знаю как сделать

Офлайн

#4 Авг. 18, 2015 18:04:30

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Flask-sqlalchemy many-to-many relationship

Ну так у Вас будет 2 таблицы-ассоциации. Связь user-number и связь user-unit.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version