2013-10-06 9 views
12

3 modelli non attributo 'FOREIGN_KEYS' ho creato con la boccetta-SQLAlchemy: User, Ruolo, UserRoleFlask-SQLAlchemy - modello ha

user.py:

class Role(ActiveRecord, db.Model): 

    __tablename__ = "roles" 

    # Schema 
    id = db.Column(db.Integer, primary_key = True) 
    name = db.Column(db.String(24), unique = True) 
    description = db.Column(db.String(90)) 

    users = db.relationship("User", secondary = "UserRole", \ 
     backref = db.backref("roles")) 

role.py:

class User(db.Model, ActiveRecord): 

    __tablename__ = "users" 

    # Schema 
    id = db.Column(db.Integer, primary_key = True) 
    email = db.Column(db.String(90), unique = True) 
    password = db.Column(db.String(64)) 

    # Relations 
    roles = db.relationship("Role", secondary = "UserRole", \ 
     backref = db.backref("users")) 

user_role.py:

class UserRole(ActiveRecord, db.Model): 

    __tablename__ = "user_roles" 

    # Schema 
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'), primary_key = True) 
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'), primary_key = True) 

Se provo (nella console) per ottenere tutti gli utenti tramite User.query.all() ottengo AttributeError: 'NoneType' object has no attribute 'all' e se provo ancora una volta ottengo un altro errore dicendo:

sqlalchemy.exc.InvalidRequestError: One or more mappers failed to initialize - can't proceed with initialization of other mappers. Original exception was: type object 'UserRole' has no attribute 'foreign_keys' 

Qualcuno può gettare una luce su che cosa è esattamente che sto fare male? Penso che questo codice sia stato eseguito correttamente alcuni mesi fa, ma ho aggiornato SQLAlchemy, Flask e Flask-SQLAlchemy di recente e si è fermato. È solo un progetto parallelo.

+0

Parte del motivo per pubblicare il codice sorgente è così che possiamo tentare di riprodurre il problema dalla nostra parte. Tuttavia, senza che noi sappiamo cosa sia ActiveRecord, o come hai configurato la "console" in cui tenti di eseguire il comando, non possiamo farlo. C'è un modo per creare un singolo script che duplica il problema? –

risposta

23

qui è un po 'difficile perché si utilizzano alcune classi di base sconosciute come "ActiveRecord" e così via. Tuttavia, sembra molto simile che l'argomento "secondario" è sbagliato:

class User(db.Model, ActiveRecord): 

    __tablename__ = "users" 

    # Schema 
    id = db.Column(db.Integer, primary_key = True) 
    email = db.Column(db.String(90), unique = True) 
    password = db.Column(db.String(64)) 

    # Relations 
    roles = db.relationship("Role", secondary = "UserRole", \ 
     backref = db.backref("users")) 

secondary necessità di fare riferimento a un oggetto Table, non una classe mappata, se in base al nome della stringa allora sarebbe "user_roles":

roles = db.relationship("Role", secondary = "user_roles", \ 
     backref = db.backref("users")) 
Problemi correlati