1
我正在使用Flask-Permissions库设置一些基本权限系统。使用Flask-Permissions UserMixin修改模型后,模型找不到外键关系
在用户类中,我用Flask-Permissions替换db.Model
和UserMixin
。
一切都应该通过,但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
为什么会出现这种异常?
你'User'模型类叉应该从'db.Model'和'UserMixin'继承。 – stamaimer
这不是真的,因为UserMixin已经从db.Model继承 –