Обратная итерация Flask Sqlalchemy - PullRequest
0 голосов
/ 19 сентября 2019

Это мои модели

Одна работа может иметь до 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

В приведенном выше примере показано, что у части 1 есть передняя и задняя части, часть 2имеет только 1 сторону, которая является передней частью задания 1. В этой ситуации я хочу выполнить итерации по частям вместо сторон.Это возможно?

Результат того, что я хочу, будет:

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

1 Ответ

0 голосов
/ 19 сентября 2019

Я думаю, что вам нужна таблица связей для многих ко многим между Сиде и Куском, а затем добавить кусочки в качестве отношения на Иове.Это может работать:

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")
...