flask - 反向迭代 Flask Sqlalchemy
问题描述
这是我的模型
一个作业最多可以有 2 个面(正面或背面)或只有正面
每面有多个碎片
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'))
通常我通过以下方式实现这些部分:Get Job Id -> Side -> Pieces
填充数据库的示例
Job 1
Front
Piece 1
Piece 2
Back
Piece 1
Job 2
Front
Piece 3
Piece 4
Back
Piece 3
Piece 4
上面的示例显示,Piece 1 有正面和背面,Piece 2 只有 1 Side,即 Job 1 的 Front。在这种情况下,我想按 Pieces 而不是 Sides 进行迭代。那可能吗?
我想要的结果是:
Job 1
Piece 1
Front
Back
Piece 2
Front
Job 2
Piece 3
Front
Back
Piece 4
Front
Back
解决方案
我认为您需要一个用于 Side 和 Piece 之间的多对多关联表,然后将片段添加为 Job 的关系。这可能有效:
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")
推荐阅读
- bash - 在传递到 AWS S3 之前更改 find 命令输出
- python - 请求 html 页面与浏览器不同
- java - JSON 模式验证不能放心使用 body(matchesJsonSchemaInClasspath("get.json"));
- php - 创建另一个相同数组的数组 - 只有一个键值。PHP
- hibernate - 如何使用 jpa 将一个简单的类(不是实体)映射到 dto(Entity) 类
- java - SessionManagementFilter 线程安全
- powershell - Powershell文件按日期搜索,显示日期和路径信息,无法导出CSV
- java - 如何从用户输入错误的地方重复输入?
- c# - debug/release.config 中的键始终为空
- java - 具有相同 url 的 Spring Rest 端点