gpt4 book ai didi

python - Flask-SqlAlchemy 中的继承

转载 作者:行者123 更新时间:2023-12-01 03:56:55 25 4
gpt4 key购买 nike

我正在构建一个位置跟踪应用程序,用户可以同时担任司机和经理。

司机和经理有两个不同的应用程序。用户可以同时担任管理员和司机。

所以,我有一个像这样的模型:

class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String, nullable=False)

def __init__(self, name):
self.name = name

class Driver(User):
driving_license = db.Column(db.String)

def __init__(self, driving_license):
self.driving_license)

class Manager(User):
designation = db.Column(db.String)

这是正确的方法吗?或者我应该设计一个用户类并单独的驱动程序和管理器类而不从用户类继承。在后一种情况下,我可以标记两个标志 is_driver 和 is_manager。

如果前者是正确的,那么如何通过将其链接到用户类来编写驱动程序和管理器的init函数。

最佳答案

您几乎肯定不想继承用户模型。这将使跟踪单个用户变得非常困难,因为单个用户将有两个不同的有效“用户”行。我个人推荐类似的东西:

class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String, nullable=False)
driver = db.relationship('Driver', uselist=False, back_populates='user')
manager = db.relationship('Manager', uselist=False, back_populates='user')

class Driver(db.Model):
id = db.Column(db.Integer, primary_key=True)
driving_license = db.Column(db.String)
user_id = db.Column(db.Integer, ForeignKey('user.id'))
user = db.relationship('User', back_populates='driver')

class Manager(db.Model):
id = db.Column(db.Integer, primary_key=True)
designation = db.Column(db.String)
user_id = db.Column(db.Integer, ForeignKey('user.id'))
user = db.relationship('User', back_populates='manager')

此外,您通常不需要重写 __init__ 方法。所以此时,我们可以相当容易地设置我们的驱动程序/管理器。

user = User(name='MyName')
db.session.add(user)
db.session.commit()
manager = Manager(designation='Some designation', user=user)
db.session.add(manager)
db.session.commit()

关于python - Flask-SqlAlchemy 中的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37294590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com