2017-09-05 27 views
2

我想在燒瓶中定義多對多關係。 (這兩個模型是UserRole。Lateron我想將它們用於瓶的安全性。)所以我也跟着http://flask-sqlalchemy.pocoo.org/2.1/models/#many-to-many-relationships,寫燒瓶多對多關係導致「找到多個類的路徑」

class User(db.Model, UserMixin): 
    __tablename__ = 'user' 
    __table_args__ = { 'useexisting': True } 
    id = Column(Integer, primary_key=True) 
    roles = relationship("RolesUsers", backref=db.backref("user", lazy='dynamic')) 

class Role(db.Model): 
    __tablename__ = 'role' 
    __table_args__ = { 'useexisting': True } 
    id = Column(Integer, primary_key=True) 
    name = Column(String(80), unique=True) 


class RolesUsers(db.Model): 
    __tablename__ = 'roles_users' 
    __table_args__ = { 'useexisting': True } 
    user_id = Column(Integer, ForeignKey('user.id'), primary_key=True) 
    role_id= Column(Integer, ForeignKey('role.id'), primary_key=True) 

但我得到的錯誤發現路徑

多個類在這個 聲明性基礎的註冊表中的「RolesUsers」。請使用完全符合模塊限定的路徑。

我發現行

roles = relationship("RolesUsers", backref=db.backref("ma_user", lazy='dynamic')) 

似乎是負責這一點。

你可能會問,爲什麼我用

__table_args__ = { 'useexisting': True } 

那是因爲別的我得到

表「用戶」已是該元數據實例定義的錯誤。指定 'extend_existing = True'可重新定義現有的 表對象上的選項和列。

也許這兩個錯誤掛在一起?在我看來,這個類看起來好像多次被稱爲類。但我不知道可能會如何。那麼我該如何修復?

+0

這會顯得你已經多次類似的類定義。你是正確的,不得不延長現有是你的情況的一個症狀。 –

回答

0

我覺得有什麼不對的模型類,爲關聯表的使用。最後

roles_users = db.Table(
    'ma_roles_users', 
    db.Column('user_id', db.Integer(), db.ForeignKey('ma_user.id')), 
    db.Column('role_id', db.Integer(), db.ForeignKey('ma_role.id')) 
) 

class User(db.Model, UserMixin): 
    __tablename__ = "user" 
    id = db.Column(db.Integer, primary_key=True) 
    roles = db.relationship(
     'Role', 
     secondary=roles_users, 
     backref=db.backref('user', lazy='dynamic') 

class Role(db.Model, RoleMixin): 
    __tablename__ = "role" 
    id = db.Column(db.Integer(), primary_key=True) 
    name = db.Column(db.String(80), unique=True) 

工作。