taibai_shopping/create_test_product_with_specs.py
2025-07-09 05:33:23 +08:00

115 lines
4.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
创建带规格的测试商品
"""
from app.models.product import Product, Category, ProductInventory, SpecName, SpecValue
from config.database import db
import json
def create_test_product():
"""创建测试商品"""
try:
# 创建或获取测试分类
category = Category.query.filter_by(name='测试分类').first()
if not category:
category = Category(
name='测试分类',
parent_id=0,
level=1,
sort_order=1,
is_active=1
)
db.session.add(category)
db.session.flush()
# 创建测试商品
product = Product(
name='测试商品 - 多规格T恤',
category_id=category.id,
brand='测试品牌',
price=99.00,
original_price=129.00,
description='这是一件多规格测试商品,支持颜色和尺寸选择',
has_specs=1,
status=1,
weight=0.3
)
db.session.add(product)
db.session.flush()
# 创建规格名称(如果不存在)
color_spec = SpecName.query.filter_by(name='颜色').first()
if not color_spec:
color_spec = SpecName(name='颜色', sort_order=1)
db.session.add(color_spec)
db.session.flush()
size_spec = SpecName.query.filter_by(name='尺寸').first()
if not size_spec:
size_spec = SpecName(name='尺寸', sort_order=2)
db.session.add(size_spec)
db.session.flush()
# 创建规格值(如果不存在)
colors = ['红色', '蓝色', '黑色']
sizes = ['S', 'M', 'L', 'XL']
for color in colors:
color_value = SpecValue.query.filter_by(spec_name_id=color_spec.id, value=color).first()
if not color_value:
color_value = SpecValue(spec_name_id=color_spec.id, value=color)
db.session.add(color_value)
for size in sizes:
size_value = SpecValue.query.filter_by(spec_name_id=size_spec.id, value=size).first()
if not size_value:
size_value = SpecValue(spec_name_id=size_spec.id, value=size)
db.session.add(size_value)
db.session.flush()
# 创建商品库存多个SKU
sku_data = [
{'color': '红色', 'size': 'S', 'stock': 10, 'price_adj': 0, 'is_default': 1},
{'color': '红色', 'size': 'M', 'stock': 15, 'price_adj': 0, 'is_default': 0},
{'color': '红色', 'size': 'L', 'stock': 12, 'price_adj': 0, 'is_default': 0},
{'color': '蓝色', 'size': 'S', 'stock': 8, 'price_adj': 5, 'is_default': 0},
{'color': '蓝色', 'size': 'M', 'stock': 20, 'price_adj': 5, 'is_default': 0},
{'color': '蓝色', 'size': 'L', 'stock': 18, 'price_adj': 5, 'is_default': 0},
{'color': '黑色', 'size': 'M', 'stock': 25, 'price_adj': -5, 'is_default': 0},
{'color': '黑色', 'size': 'L', 'stock': 22, 'price_adj': -5, 'is_default': 0},
{'color': '黑色', 'size': 'XL', 'stock': 15, 'price_adj': 10, 'is_default': 0},
]
for i, sku_info in enumerate(sku_data):
spec_combination = {'颜色': sku_info['color'], '尺寸': sku_info['size']}
sku_code = f"TST-{sku_info['color'][:1]}{sku_info['size']}-{product.id:03d}"
inventory = ProductInventory(
product_id=product.id,
sku_code=sku_code,
spec_combination=spec_combination,
price_adjustment=sku_info['price_adj'],
stock=sku_info['stock'],
warning_stock=5,
is_default=sku_info['is_default'],
status=1
)
db.session.add(inventory)
db.session.commit()
print(f"成功创建测试商品: {product.name} (ID: {product.id})")
print(f"创建了 {len(sku_data)} 个SKU")
return product.id
except Exception as e:
db.session.rollback()
print(f"创建失败: {str(e)}")
return None
if __name__ == '__main__':
from app import create_app
app = create_app()
with app.app_context():
create_test_product()