2017-08-17 90 views
1

我正在使用Flask-Permissions库设置一些基本权限系统。使用Flask-Permissions UserMixin修改模型后,模型找不到外键关系

在用户类中,我用Flask-Permissions替换db.ModelUserMixin

一切都应该通过,但SQLAlchemy的抛出错误

sqlalchemy.exc.NoForeignKeysError: Can't find any foreign key relationships between 'fp_user' and 'user'.

那不是看起来很不错。我认为UserMixin已经从db.Model继承。

这是我当前的代码

Class User(UserMixin): 
    __tablename__ = "user" 

    id = db.Column(db.Integer, primary_key=True, autoincrement=True) 
    first_name = db.Column(db.String(50), nullable=False) 
    last_name = db.Column(db.String(50), nullable=False) 
    email = db.Column(db.String(255), unique=True, nullable=False) 
    storage_hash = db.Column(db.String(255), unique=True) 
    password = db.Column(db.String(255), nullable=False) 
    profile_picture = db.Column(db.String(255)) 
    gender = db.Column(db.Enum('male', 'female', name='gender')) 
    registered_on = db.Column(db.Date, nullable=False) 
    last_activity = db.Column(db.DateTime) 
    role = db.Column(
    db.Enum('student', 'teacher', 'secretary', 'debuty_director', 'director', 'supervisor', name='user_role'), 
    nullable=False) 
    credit = db.Column(db.Float, default=0) 
    school_id = db.Column(db.Integer, db.ForeignKey('school.id'), nullable=True) 
    file = db.relationship('File', backref='user', lazy='dynamic') 
    class_id = db.Column(db.Integer, db.ForeignKey('class.id'), nullable=True) 
    storage = db.relationship('UserStorage', uselist=False, backref='user') 
    payments = db.relationship('UserPayments', uselist=False, backref='user') 

    def __init__(self, first_name, last_name, email, password, school_id=None, role='student', gender='male'): 
     UserMixin.__init__(self, role) 
     self.first_name = first_name 
     self.last_name = last_name 
     self.email = email 
     self.storage_hash = strgen.StringGenerator('[\w\d]{20}').render() 
     os.mkdir(app.config['UPLOAD_FOLDER'] + self.storage_hash) 
     self.password = bcrypt.generate_password_hash(
     password, app.config.get('BCRYPT_LOG_ROUNDS') 
    ).decode('utf-8') 
     shutil.copy(app.config['IMAGES_FOLDER'] + 'resources/users/default_{}.png'.format(gender), 
       '{}/{}/'.format(app.config['UPLOAD_FOLDER'], self.storage_hash)) 
     self.profile_picture = 'user_files/{}/default_{}.png'.format(self.storage_hash, gender) 
     self.gender = gender 
     self.registered_on = datetime.datetime.now() 
     self.role = role 
     self.school_id = school_id 
     storage = UserStorage() 

     db.session.add(storage) 
     db.session.commit() 

     self.storage_id = storage.id 

为什么会出现这种异常?

+0

你'User'模型类叉应该从'db.Model'和'UserMixin'继承。 – stamaimer

+0

这不是真的,因为UserMixin已经从db.Model继承 –

回答

0

问题出现在表名中。我的__tablename__设置为user,但在Flask-PermissionsUserMixin表中设置为fp_user。我必须删除表名或在库中替换它。

更好的选择是使用的Flask-PermissionsSQLAlchemy-Permissions