Обработка объектов ассоциации, добавление дочерних элементов к родительским, скрытие использования "средней" таблицы

Я ищу удобный способ создания ModelView, используемый для добавления нескольких детей к родителю при его создании.
Например, у меня есть модели:

class Order(db.Model):
    __tablename__ = 'order'
    id = db.Column(db.Integer, primary_key=True)
    things = db.relationship('OrderList', back_populates='order', lazy='dynamic')

class OrderList(db.Model):
    __tablename__ = 'order_list'
    order_id = db.Column(db.Integer, db.ForeignKey('order.id'), primary_key=True)
    thing_id = db.Column(db.Integer, db.ForeignKey('things.id'), primary_key=True)
    amount = db.Column(db.Numeric(precision=10, scale=3))
    order = db.relationship('Order', back_populates='things', lazy='joined')
    thing = db.relationship('Thing', back_populates='orders', lazy='joined')

class Thing(db.Model):
    __tablename__ = 'things'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128))
    orders = db.relationship('OrderList', back_populates='thing', lazy='dynamic')
    stock = db.Column(db.Numeric(precision=10, scale=3))
    price = db.Column(db.Numeric(precision=10, scale=3))

Просто добавив, что модели в flask-admin, я бы получил возможность добавить экземпляры OrderList к вещи или заказать:

Введите описание изображения здесь
Введите описание изображения здесь
Но как добавить детей к родителю без доступа к среднему объекту OrderList? Так же, как использование отношения «один ко многим».

Таблица схема:

Введите описание изображения здесь

1 ответ

  1. Из того , что я понимаю, вы хотите определить отношения «многие ко многим» на Order«иThing«.

    Вместо объявления OrderListкласса, я думаю, что вы должны объявить отношение многие ко многим, как это

    1. Много ко многим

    2. Добавление удаления в MtM

    Таким образом, вы можете создавать экземпляры обоих Orderи Thingи добавлять их друг к другу, чтобы создать связь «многие ко многим».

    РЕДАКТИРОВАТЬ

    Для выполнения работы можно использовать прокси-сервер Ассоциации.

    Необходимо добавить следующий конструктор к вашемуOrderList class

    def __init__(self,amount, order, thing):
        self.amount = amount
        self.order = order
        self.thing = thing
    

    Кроме этого вы должны будете определитьassociation proxy, как показано в ссылке. Это должно сделать вашу работу.