あなたはassocation objectを使用することができます。
「関連オブジェクトパターンが多対多の変種です:それはあなたの関連テーブルが を超える追加の列に外部キーであるものが含まれている場合に使用 です左右のテーブル。
この場合、あなたはORMオブジェクトとしてusers_departments
テーブルを定義できます:viewonly
フラグがTrue
を設定すると、私は、secondary
としてこのようなテーブルを使用して成功を収めている
class UserDepartment(db.Model): # Since we're using Flask-SQLAlchemy
__tablename__ = 'users_departments'
user_id = db.Column(db.Integer, ForeignKey('users.id'), primary_key=True)
department_id = db.Column(db.Integer, ForeignKey('departments.id'), primary_key=True)
is_manager = db.Column(db.Boolean)
user = relationship('User', back_populates='department_assoc')
department = relationship('Department', back_populates='user_assoc')
。でリンクドキュメントを
>>> x = UserDepartment(user_id=n, department_id=m, is_manager=False)
>>> db.session.add(x)
>>> db.session.commit()
ルック:これは、実際の変更がusers_departments
テーブルの上に直接行われ、読み取り専用の関係を定義し
departments = db.relationship('Department',
secondary='users_departments',
viewonly=True,
backref=db.backref('users', viewonly=True, lazy='dynamic'),
lazy='dynamic')
:だからUsers
クラスの関係を定義することができますこの投稿の最初の部分はなぜviewonly
が良い考えであるかを理解する。 viewonly
のドキュメント自体はhereです。
またUser
クラスの列users.department_assoc
を定義することができます。
department_assoc = db.relationship('UserDepartment', back_populates='user')
をして、変更を行います。
>>>> some_user = User.query.get(n)
>>>> some_user.department_assoc.append(UserDepartment(department_id=m, is_manager=False))
>>>> db.session.commit()
注: 'backref'の代わりに、' back_populates'との関係を定義し、あなたは関係の一方の側でそれを定義する必要があります。ドキュメント[here](http://docs.sqlalchemy.org/en/latest/orm/backref.html#linking-relationships-with-backref)を参照してください。 –