Limit many-to-many association objects in Flask-Admin based on a field in the edited object

22 Views Asked by At

I have a flask-admin application for the following Flask-SQLAlchemy model. When the admin page for Order I can link to all existing Payment objects. However, I only want to show Payment objects that were made by the same Customer as the Order refers to. How can I do this?

class Customer(db.Model):
    __tablename__ = "customer"
    id = db.Column(db.Integer, primary_key=True)

orders_payments = db.Table(
    'orders_payments',
    db.Column('order_id', db.Integer, db.ForeignKey('order.id')),
    db.Column('payment_id', db.Integer, db.ForeignKey('payment.id'))
)

class Order(db.Model):
    __tablename__ = "order"
    id = db.Column(db.Integer, primary_key=True)
    customer_id = db.Column(db.Integer, db.ForeignKey("customer.id"))
    customer = db.relationship(Customer, backref='orders')

    payments = db.relationship("Payment", secondary=orders_payments, backref="orders")

class Payment(db.Model):
    __tablename__ = "payment"
    id = db.Column(db.Integer, primary_key=True)
    customer_id = db.Column(db.Integer, db.ForeignKey("customer.id"))
    customer = db.relationship(Customer, backref='payments')
0

There are 0 best solutions below