Flask 逆向炼金术

Flask 逆向炼金术,flask,sqlalchemy,flask-sqlalchemy,Flask,Sqlalchemy,Flask Sqlalchemy,这是我的模型 一个作业最多可以有两个侧面(正面或背面)或只有正面 每一面都有多块 class Job(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(120), nullable=False) sides = db.relationship('Side', backref=db.backref('job', lazy=True)) class Side(

这是我的模型

一个作业最多可以有两个侧面(正面或背面)或只有正面

每一面都有多块

class Job(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(120), nullable=False)
    sides = db.relationship('Side', backref=db.backref('job', lazy=True))

class Side(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    job_id = db.Column(db.Integer, db.ForeignKey('job.id'))
    pieces = db.relationship('Piece', backref='side', lazy='select')

class Piece(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50), unique=True, nullable=False)
    filename_img = db.Column(db.String(50), unique=True, nullable=True)
    side_id = db.Column(db.Integer, db.ForeignKey('side.id'))
通常情况下,我通过以下方式完成这些作品: 获取作业Id->侧面->工件

填充数据库的示例

Job 1
  Front
    Piece 1
    Piece 2
  Back
    Piece 1

Job 2
  Front
    Piece 3
    Piece 4
  Back
    Piece 3
    Piece 4
上面的示例显示工件1有正面和背面,工件2只有一面,即工件1的正面。在这种情况下,我想用片段而不是边进行迭代。可能吗

我想要的结果是:

Job 1
  Piece 1
    Front
    Back
  Piece 2
    Front
Job 2
  Piece 3
    Front
    Back
  Piece 4
    Front
    Back

我认为你们需要一个边和块之间的多对多关联表,然后在工作中添加块作为关系。这可能会奏效:

sides_pieces = db.Table(
    'sides_pieces',
    db.Column('side_id', db.Integer, db.ForeignKey('sides.id'), nullable=False),
    db.Column('piece_id', db.Integer, db.ForeignKey('pieces.id'), nullable=False)
)

class Job(db.Model):
    __tablename__ = 'jobs'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(120), nullable=False)
    sides = db.relationship('Side', backref=db.backref('job', lazy=True))
    pieces = db.relationship('Piece', backref=db.backref('job', lazy=True))

class Side(db.Model):
    __tablename__ = 'sides'
    id = db.Column(db.Integer, primary_key=True)
    job_id = db.Column(db.Integer, db.ForeignKey('jobs.id'))
    pieces = db.relationship('Piece', secondary=sides_pieces, back_populates="sides")

class Piece(db.Model):
    __tablename__ = 'pieces'
    id = db.Column(db.Integer, primary_key=True)
    job_id = db.Column(db.Integer, db.ForeignKey('jobs.id'))
    name = db.Column(db.String(50), unique=True, nullable=False)
    filename_img = db.Column(db.String(50), unique=True, nullable=True)
    sides = db.relationship('Side', secondary=sides_pieces, back_populates="pieces")