我有不同的用户,他们将访问平台中的不同功能,并拥有与他们相关的不同信息。我根据下图实现了这些表,其中我有一个包含身份验证数据的用户表,我有两个表,用于两种用户类型及其相应的信息。

我与“zpeedr <-> user”有一对一的关系,对于“merchant <-> user”也是如此。我将 flask_sqlalchemy 与 postgresql 数据库一起使用。如果不按预期将其与现有 user.id 关联,则无法实例化 zpeedr 或商家类型用户。我的问题是,使用此设置,我可以为 zpeedr 和商家分配相同的 user_id。我如何确保一个 user.id 只能由 zpeedr 用户或商家用户关联?
我创建表的简化代码是:
类用户(UserMixin,db.Model):
'''用户属性'''
id = db.Column(db.Integer, primary_key=True)
角色 = db.Column(db.String(10), nullable=False)
名称 = db.Column(db.String(50), nullable=False)
电子邮件 = db.Column(db.String(50),唯一 = True,可为空 = False)
password_hash = db.Column(db.String(250), nullable=False)
状态 = db.Column(db.String(15), server_default="Pending")
registration_date = db.Column(db.DateTime, server_default=db.func.current_timestamp())
zpeedr = db.relationship('Zpeedr', backref='user', uselist=False)
商家 = db.relationship('Merchant', backref='user', uselist=False)
def __init__(self, role, name, email, password_hash, status, registration_date, zpeedr, merchant):
self.role = role
self.name = name
self.email = email
self.password_hash = password_hash
self.status = status
self.registration_date = registration_date
self.zpeedr = zpeedr
self.merchant = merchant
Zpeedr 类(db.Model):
''' Zpeedr 属性 '''
id = db.Column(db.Integer, primary_key=True)
# 用户表的外键
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False, unique=True)
地址 = db.Column(db.String(200), nullable=False)
位置 = db.Column(db.String(50), nullable=False)
邮政编码 = db.Column(db.String(10), nullable=False)
联系人 = db.Column(db.String(15), nullable=False)
增值税 = db.Column(db.String(20), nullable=False, unique=True)
nin = db.Column(db.String(20), nullable=False, unique=True)
def __init__(self, user_id, address, location, zipcode, contact, vat, nin):
self.user_id = user_id
self.address = address
self.location = location
self.zipcode = zipcode
self.contact = contact
self.vat = vat
self.nin = nin
万千封印
摇曳的蔷薇
随时随地看视频慕课网APP
相关分类