【发布时间】:2020-01-25 17:29:34
【问题描述】:
我打算将三种用户类型存储在三个不同的数据库表中。结构如下:
-
master表包含列id、teacher_userid、student_userid、parent_userid、role和其他一些列。 -
teacher表包含有关教师用户的详细信息(包括登录凭据) -
student表包含有关学生用户的详细信息(包括登录凭据) -
parent表包含有关父用户的详细信息(包括登录凭据)
拥有三个单独的表的原因是为每个表存储的数据会有很大不同,这样做看起来更干净。
我希望任何类型的用户都能够通过我的 Flask 应用程序中的相同表单登录。 flask-login 应该查找 master 表,然后应该从相关的 teacher、student 或 parent 表中提取数据以填充用户模型。
但是,我对如何使用其他表中的数据有条件地填充用户模型感到困惑。
理想的情况是能够将这样的内容添加到User(db.model):
if 'Teacher' in role:
name = teacher.name
email = teacher.email
elif 'Student in role:
name = student.name
email = student.email
等等。但是,似乎不可能在 User 类的定义中使用类似的条件语句。 getter 和 setter 是解决方案吗?这一切都感觉很混乱。
【问题讨论】:
-
我想您可能正在寻找的是:Mapping Class Inheritance Hierarchies.
-
另外this SO thread 有一些相关信息。
标签: mysql flask flask-sqlalchemy flask-login