Доброго времени суток.
Есть три сущности (таблицы SQLAlchemy, работаю с Flask SQLAlchemy):
- Товар (Samsung Galaxy 7)
- Вариация товара (Samsung Galaxy 7 Coral Blue 32GB)
- Заказ (включает товар и вариацию)
Вопрос: Как сделать так, чтобы в таблице заказов (
Order
), столбец товаров (
product_id
) не подтягивался через
foreign_key
, а считался сам, на базе вариации (
variation_id
) добавленной в заказ? То есть добавляем в заказ Samsung Galaxy 7 Coral Blue 32GB, а в столбец
product_id
автоматически подтягивается id parent товара из таблицы товаров.
Я пробовал использовать
variation.parent_id
, и backhref
variation.origin_product
, но без особых успехов :)
Модели таблиц:class Product(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(120), index=True)
brand = db.Column(db.String(120))
variations = db.relationship('Variation', backref='origin_product', lazy='dynamic')
orders = db.relationship('Order', backref='product_in_order', lazy='dynamic')
class Variation(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(120), index=True)
price = db.Column(db.Integer)
product_id = db.Column(db.Integer, db.ForeignKey('product.id'))
orders = db.relationship('Order', backref='variation_in_order', lazy='dynamic')
class Order(db.Model):
id = db.Column(db.Integer, primary_key=True)
timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
variation_id = db.Column(db.Integer, db.ForeignKey('variation.id'))
product_id = db.Column(db.Integer, db.ForeignKey('product.id'))
P.S. product_id = db.Column(db.Integer, db.ForeignKey('variation.product_id'))
работает в базе данных, я вижу правильный id продукта. Но инструменты вроде Flask-Admin все равно видят это как сущность вариации, а не продукта. Нужно найти способ присоединить к поле именно вариацию продукта, например, через
ForeignKey
, но базируясь на
variation_id
.