Я работаю над базой данных приложения электронной коммерции, у меня есть отношение «Один ко многим» - с помощью SQLAlchemy отношение () - между таблицей Order
(родительская) и таблицей OrderItem
(дочерняя)).
База данных:
class Order(db.Model):
id = db.Column(db.Integer, primary_key=True)
customer_id = db.Column(db.Integer, db.ForeignKey('customer.id'), nullable=False)
total = db.Column(db.Integer, nullable=False)
submitted_on = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
delivery_charges = db.Column(db.Integer, nullable=False)
sub_total = db.Column(db.Integer, nullable=False) # needs to be calculated automatically
total_quantity = db.Column(db.Integer, nullable=False) # needs to be calculated automatically
order_items = db.relationship('OrderItem', backref='order', lazy=True)
def __init__(self, customer_id, delivery_charges, sub_total, total_quantity):
self.customer_id = customer_id
self.delivery_charges = delivery_charges
self.sub_total = sub_total
self.total_quantity = total_quantity
self.total = delivery_charges + sub_total
class OrderItem(db.Model):
__tablename__ = "order_item"
id = db.Column(db.Integer, primary_key=True)
order_id = db.Column(db.Integer, db.ForeignKey('order.id'), nullable=False)
product_size_color_id = db.Column(db.Integer, db.ForeignKey('product_size_color.id'), nullable=False)
sale_id = db.Column(db.Integer, db.ForeignKey('sale.id'), nullable=True, default=None)
selling_price = db.Column(db.Integer, nullable=False) # needs to be calculated automatically
quantity = db.Column(db.Integer, nullable=False)
я пытаюсь сделать следующее: я хочу, чтобы определенные столбцы вычислялись автоматически в зависимости от значений из других таблиц как таковых:
- Order.total_quantity
: сумма каждого order_item.quantity
, соответствующего одному и тому же Order
экземпляру
- Order.sub_total
: сумма каждого order_item.selling_price
, соответствующего одному и тому же Order
экземпляру.
- Order_item.selling_price
: ...
Я использовал default
для автоматического получения некоторых столбцов, как в Order.submitted_on
, и использовал функцию __init__
в классе Order
для вычислениязначение Order.total
, как ответили в на этот вопрос . Однако эти два метода работают только в том случае, если значения находятся внутри самого класса / таблицы, мой вопрос: как я могу автоматически устанавливать значения для столбцов в зависимости от другихзначения таблиц? !!
Я попробовал следующий код в столбце Order.total_quantity
, он заполнил столбец нулями!
def __init__(self, customer_id, delivery_charges, sub_total):
self.customer_id = customer_id
self.delivery_charges = delivery_charges
self.sub_total = sub_total
order_items = self.order_items
self.total_quantity = sum([i.quantity for i in order_items])
self.total = delivery_charges + sub_total
Возможно ли то, что я пытаюсь сделать?Как?