#stock.py from app.extensions import db from datetime import datetime class StockBuy(db.Model): __tablename__ = 'stock_buy' id = db.Column(db.Integer, primary_key=True) # 【核心关联】 # 这里明确指定了 base_id 是外键,关联 material_base 表的 id base_id = db.Column(db.Integer, db.ForeignKey('material_base.id'), nullable=False) sku = db.Column(db.String(100)) in_date = db.Column(db.Date) serial_number = db.Column(db.String(100)) batch_number = db.Column(db.String(100)) # 数量 in_quantity = db.Column(db.Numeric(19, 4), default=0) stock_quantity = db.Column(db.Numeric(19, 4), default=0) available_quantity = db.Column(db.Numeric(19, 4), default=0) # 状态与位置 status = db.Column(db.String(50)) inspection_status = db.Column(db.String(50)) warehouse_location = db.Column(db.String(100)) # 财务与商务 unit_price = db.Column(db.Numeric(19, 4), default=0) total_price = db.Column(db.Numeric(19, 4), default=0) currency = db.Column(db.String(20), default='CNY') exchange_rate = db.Column(db.Numeric(15, 6), default=1.0) supplier_name = db.Column(db.String(255)) buyer_name = db.Column(db.String(100)) buyer_email = db.Column(db.String(100)) original_link = db.Column(db.Text) detail_link = db.Column(db.Text) arrival_photo = db.Column(db.Text) # 【核心关联】 # 建立对象级别的连接,方便通过 stock.material 访问基础信息 material = db.relationship('MaterialBase', back_populates='stock_buys') def to_dict(self): """序列化""" return { 'id': self.id, 'base_id': self.base_id, # 前端需要这个ID来判断关联 'material_name': self.material.name if self.material else None, 'spec_model': self.material.spec_model if self.material else None, 'category': self.material.category if self.material else None, 'unit': self.material.unit if self.material else None, 'material_type': self.material.material_type if self.material else None, 'sku': self.sku, 'inbound_date': self.in_date.strftime('%Y-%m-%d') if self.in_date else None, 'serial_number': self.serial_number, 'batch_number': self.batch_number, 'qty_inbound': float(self.in_quantity) if self.in_quantity else 0, 'qty_stock': float(self.stock_quantity) if self.stock_quantity else 0, 'qty_available': float(self.available_quantity) if self.available_quantity else 0, 'warehouse_loc': self.warehouse_location, 'status': self.status, 'price_unit': float(self.unit_price) if self.unit_price else 0, 'price_total': float(self.total_price) if self.total_price else 0, 'supplier_name': self.supplier_name }