sortarage
@sortarage
Я тучка-тучка-тучка, я вовсе не медведь

Как в SQLAlchemy добавить столбец, который базируется на другом столбце таблицы?

Доброго времени суток.

Есть три сущности (таблицы 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.
  • Вопрос задан
  • 601 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы