Есть две связанные ОТМ таблицы БД.
Суть в том, что к номеру заказа привязываются таблицы с файлами.
Сами таблицы (фреймы) записаны в одной таб.БД 'frames', где каждая строка привязана к номеру заказа по id заказа и к номеру фрейма заказа через frame_num.
Дело осложняется тем, что количество строк в каждом фрейме неограничено 1+N, количество самих фреймов в заказе также не ограничено 1+N
Вроде понятно описал, но могу нарисовать.
Как такое организовать в шаблоне, с настройкой (добавить фрейм(таблицу), добавить строку в фрейме)?
models.py
class Frame(db.Model):
"""Модель таблицы файлов"""
__tablename__ = 'frames'
id = db.Column(db.Integer, primary_key=True)
digital_orders_id = db.Column(db.Integer)
frame_num = db.Column(db.SMALLINT)
row_num = db.Column(db.SMALLINT)
url_file = db.Column(db.String(255))
def __init__(self, *args, **kwargs):
super(Frame, self).__init__(*args, **kwargs)
def __repr__(self):
return f'< {self.id} {self.frame_num} от {self.digital_orders_id}>'
class DigitalOrder(db.Model):
"""Модель таблицы заказа"""
__tablename__ = 'digital_orders'
id = db.Column(db.Integer, primary_key=True)
order = db.Column(db.String(140), nullable=False)
frames_id = db.Column(db.Integer, db.ForeignKey('frames.id'), nullable=False)
frames = db.relationship("Frame", backref=db.backref('digital_orders'))
"""id фреймов из таблицы frames"""
def __repr__(self):
return f'<{self.id} {self.order}>'
forms.py
from flask_wtf import Form
from wtforms.ext.sqlalchemy.fields import *
from wtforms import *
from models import *
class DigitalOrderForm(Form):
order = StringField('Номер з-за')
frames = IntegerField('Фреймы')
blueprint.py
from flask import Blueprint, session
from flask import render_template
from models import *
from .forms import DigitalOrderForm
from flask import request
from app import db
from flask import redirect
from flask import url_for
from models import slugify
from flask_security import login_required
digitalorders = Blueprint('digitalorders', __name__, template_folder='templates')
@digitalorders.route('/create', methods=['POST', 'GET'])
@login_required
def create_digitalorder():
if request.method == 'POST':
order = request.form['order']
frames = request.form['frames']
try:
order = DigitalOrder(order=order, frames=frames)
db.session.add(order)
db.session.commit()
except:
print('Something wrong')
return redirect(url_for('digitalorders.index.html'))
form = DigitalOrderForm()
return render_template('digitalorders/create.html', form=form)
Нашел модуль flask_table. Но он лет 5 не обновлялся.