0

假设我有这些模型:

class User(db.Model):
    __tablename__ = 'Users'
    __table_args__ = {'extend_existing': True}
    id = db.Column(db.Integer, primary_key=True)
    alias = db.Column(db.String(120), index=True, unique=True)
    name = db.Column(db.String(120), index=True, unique=False)
    lastname = db.Column(db.String(120), index=True, nullable=False)
    email = db.Column(db.String(120), index=True, nullable=False)
    password = db.Column(db.String(120), index=False, nullable=True)
    created_on = db.Column(db.DateTime, default=datetime.now)
    updated_on = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now)
class A(db.Model):
    __tablename__ = 'A'
    __table_args__ = {'extend_existing': True}
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(120), index=True, unique=True)
class B(db.Model):
    __tablename__ = 'B'
    __table_args__ = {'extend_existing': True}
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(120), index=True, unique=True)

我想创建另一个名为 Audit 的模型,它可以引用Aand B,所以我在考虑多态关联,但我找不到有效的文档来做到这一点。

class Audit(db.Model):
    __tablename__ = 'audit'
    __table_args__ = {'extend_existing': True}
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(120), index=True, unique=True)
    user_id = db.Column(db.Integer, db.ForeignKey('Users.id'), nullable=True)
    object???

我想要一个可以指向Aor的对象B

4

1 回答 1

0

我只是猜测,也许你想要像下面这样的东西。我发现有时只有条件设置的列更有用,除非你真的有一个继承树,即。真正的多态模型。

class Audit(db.Model):
    __tablename__ = 'audit'
    __table_args__ = {'extend_existing': True}
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(120), index=True, unique=True)
    user_id = db.Column(db.Integer, db.ForeignKey('Users.id'), nullable=True)
    dataset_id = db.Column(db.Integer, db.ForeignKey('dataset.id'), nullable=True)
    dataset = db.relationship('Dataset', backref='audits')

class Dataset(Base):
    __tablename__ = 'datasets'
    id = Column(Integer, primary_key=True)
    type = Column(String(20))
    name = db.Column(db.String(120), index=True, unique=True)
    __mapper_args__ = {
        'polymorphic_on':type,
        # You can probably use None here
        # and set type to nullable= False 
        # if you don't want a base case
        'polymorphic_identity': 'c'
    }

class DatasetA(Dataset):
    info = db.Column(db.String(120))
    __mapper_args__ = {
        'polymorphic_identity':'a'
    }

class DatasetB(Dataset):
    __mapper_args__ = {
        'polymorphic_identity':'b'
    }
于 2021-07-28T00:16:42.300 回答