lty/qy_lty/card/example_data.py
2026-03-17 13:17:02 +08:00

926 lines
28 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 django.utils import timezone
import datetime
import random
from card.models import (
CardTemplate, Card, CardBatch,
ClothingAttributes, PropAttributes, SongAttributes,
DanceAttributes, FurnitureAttributes, DecorationAttributes
)
from django.db import transaction
def create_examples():
"""Create example cards for each category"""
with transaction.atomic():
# 先清除可能存在的示例数据,避免唯一性冲突
clear_existing_data()
# 创建多种不同类型的卡牌模板
clothing_templates = create_clothing_templates()
prop_templates = create_prop_templates()
song_templates = create_song_templates()
dance_templates = create_dance_templates()
furniture_templates = create_furniture_templates()
decoration_templates = create_decoration_templates()
print("Successfully created example cards for all categories!")
return {
"clothing": clothing_templates,
"prop": prop_templates,
"song": song_templates,
"dance": dance_templates,
"furniture": furniture_templates,
"decoration": decoration_templates,
}
def clear_existing_data():
"""清除已存在的示例数据,避免重复创建导致的错误"""
print("清除现有示例数据...")
# 先删除卡片实例,避免外键约束问题
Card.objects.all().delete()
# 删除卡片批次
CardBatch.objects.all().delete()
# 删除各种卡牌属性
ClothingAttributes.objects.all().delete()
PropAttributes.objects.all().delete()
SongAttributes.objects.all().delete()
DanceAttributes.objects.all().delete()
FurnitureAttributes.objects.all().delete()
DecorationAttributes.objects.all().delete()
# 最后删除卡牌模板
CardTemplate.objects.all().delete()
print("已清除现有示例数据")
def generate_batch_number(prefix, template_id, index=1):
"""生成唯一的批次号使用时间戳和模板ID+索引确保唯一性"""
timestamp = timezone.now().strftime('%y%m%d%H%M')
# 使用模板ID和批次序号作为后缀
return f"{prefix}-{timestamp}-{template_id}{index:02d}"
def create_clothing_templates():
"""创建服装类卡牌模板"""
templates = []
# 1. 夏日清凉T恤
clothing_template = CardTemplate.objects.create(
name="夏日清凉T恤",
category="clothing",
description="轻薄透气的T恤适合夏季穿着",
card_type="regular",
rarity="uncommon",
price=69.99,
status="published",
published_at=timezone.now()
)
ClothingAttributes.objects.create(
template=clothing_template,
style="休闲",
size="M",
color="天蓝色",
season="夏季",
material="棉质",
fit_type="标准",
care_instructions="机洗冷水,低温烘干"
)
create_batch_and_cards(clothing_template, "CLT", 100, "2023年夏季T恤卡片批次", 5)
templates.append(clothing_template)
# 2. 星光限定连衣裙
limited_clothing = CardTemplate.objects.create(
name="星光限定连衣裙",
category="clothing",
description="限量发行的星光元素连衣裙,闪耀夺目",
card_type="limited",
rarity="limited",
price=299.99,
status="published",
published_at=timezone.now()
)
ClothingAttributes.objects.create(
template=limited_clothing,
style="华丽",
size="S/M/L",
color="星空蓝",
season="春秋",
material="聚酯纤维、亮片",
fit_type="修身",
care_instructions="仅限干洗,禁止机洗"
)
create_batch_and_cards(limited_clothing, "CLT-SPECIAL", 20, "特别版星光限定连衣裙卡片批次", 3)
templates.append(limited_clothing)
# 3. 复古牛仔夹克
clothing3 = CardTemplate.objects.create(
name="复古牛仔夹克",
category="clothing",
description="经典复古风格牛仔夹克,耐穿百搭",
card_type="regular",
rarity="rare",
price=199.99,
status="published",
published_at=timezone.now()
)
ClothingAttributes.objects.create(
template=clothing3,
style="复古",
size="L",
color="深蓝色",
season="春秋",
material="牛仔布",
fit_type="宽松",
care_instructions="冷水手洗,避免用漂白剂"
)
create_batch_and_cards(clothing3, "CLT", 80, "复古牛仔夹克卡片批次", 5)
templates.append(clothing3)
# 4. 运动健身背心
clothing4 = CardTemplate.objects.create(
name="运动健身背心",
category="clothing",
description="弹性透气的健身背心,适合各种运动场景",
card_type="regular",
rarity="common",
price=49.99,
status="published",
published_at=timezone.now()
)
ClothingAttributes.objects.create(
template=clothing4,
style="运动",
size="均码",
color="黑色",
season="四季",
material="聚酯纤维,氨纶",
fit_type="贴身",
care_instructions="冷水洗涤,避免烘干机"
)
create_batch_and_cards(clothing4, "CLT", 150, "运动健身背心卡片批次", 5)
templates.append(clothing4)
# 5. 冬季保暖羽绒服
clothing5 = CardTemplate.objects.create(
name="冬季保暖羽绒服",
category="clothing",
description="轻量保暖的高级羽绒服,抵御严寒",
card_type="seasonal",
rarity="epic",
price=499.99,
status="published",
published_at=timezone.now()
)
ClothingAttributes.objects.create(
template=clothing5,
style="户外",
size="XL",
color="军绿色",
season="冬季",
material="防水面料,白鹅绒填充",
fit_type="适中",
care_instructions="专业干洗,避免长期挤压"
)
create_batch_and_cards(clothing5, "CLT", 60, "冬季羽绒服卡片批次", 5)
templates.append(clothing5)
return templates
def create_prop_templates():
"""创建道具类卡牌模板"""
templates = []
# 1. 梦幻魔法棒
prop_template = CardTemplate.objects.create(
name="梦幻魔法棒",
category="prop",
description="华丽的魔法棒道具,可发光",
card_type="seasonal",
rarity="rare",
price=129.99,
status="published",
published_at=timezone.now()
)
PropAttributes.objects.create(
template=prop_template,
prop_type="手持道具",
material="塑料、LED灯",
size="45cm长",
weight=150.0,
durability="",
usage_instructions="按下底部按钮开启灯效长按3秒关闭"
)
create_batch_and_cards(prop_template, "PROP", 50, "魔法棒道具卡片批次", 5)
templates.append(prop_template)
# 2. 古风折扇
legendary_prop = CardTemplate.objects.create(
name="古风折扇",
category="prop",
description="精美古风折扇,采用传统工艺制作",
card_type="regular",
rarity="legendary",
price=399.99,
status="published",
published_at=timezone.now()
)
PropAttributes.objects.create(
template=legendary_prop,
prop_type="折扇",
material="竹、丝绸",
size="21cm长(展开后)",
weight=80.0,
durability="中等",
usage_instructions="轻柔开合,避免暴力折叠"
)
create_batch_and_cards(legendary_prop, "PROP-SPECIAL", 20, "特别版古风折扇卡片批次", 3)
templates.append(legendary_prop)
# 3. 战士护腕
prop3 = CardTemplate.objects.create(
name="战士护腕",
category="prop",
description="科幻风格的战士护腕,带有炫酷灯效",
card_type="event",
rarity="epic",
price=159.99,
status="published",
published_at=timezone.now()
)
PropAttributes.objects.create(
template=prop3,
prop_type="腕部装饰",
material="合成皮革、LED灯、3D打印件",
size="可调节,适合大多数尺寸",
weight=220.0,
durability="",
usage_instructions="长按中央按钮3秒开机短按切换模式"
)
create_batch_and_cards(prop3, "PROP", 40, "战士护腕卡片批次", 5)
templates.append(prop3)
# 4. 复古怀表
prop4 = CardTemplate.objects.create(
name="复古怀表",
category="prop",
description="精致的复古怀表,走时精准",
card_type="regular",
rarity="uncommon",
price=89.99,
status="published",
published_at=timezone.now()
)
PropAttributes.objects.create(
template=prop4,
prop_type="饰品",
material="合金",
size="直径4cm",
weight=60.0,
durability="中等",
usage_instructions="需定期上发条,避免水浸和磁场"
)
create_batch_and_cards(prop4, "PROP", 100, "复古怀表卡片批次", 5)
templates.append(prop4)
# 5. 魔法书道具
prop5 = CardTemplate.objects.create(
name="魔法书道具",
category="prop",
description="精美制作的魔法书道具,内页可打开",
card_type="seasonal",
rarity="epic",
price=199.99,
status="published",
published_at=timezone.now()
)
PropAttributes.objects.create(
template=prop5,
prop_type="书籍道具",
material="皮革、特种纸、LED灯",
size="25cm×18cm×5cm",
weight=350.0,
durability="中等",
usage_instructions="轻拿轻放,避免水浸"
)
create_batch_and_cards(prop5, "PROP", 30, "魔法书道具卡片批次", 5)
templates.append(prop5)
return templates
def create_song_templates():
"""创建音乐类卡牌模板"""
templates = []
# 1. 星空之梦
song_template = CardTemplate.objects.create(
name="星空之梦",
category="song",
description="舒缓的电子音乐,适合夜晚聆听",
card_type="regular",
rarity="epic",
price=39.99,
status="published",
published_at=timezone.now()
)
SongAttributes.objects.create(
template=song_template,
genre="电子",
duration=datetime.timedelta(minutes=3, seconds=45),
bpm=120,
composer="星辰音乐",
lyricist="月光诗人",
arrangement="电子工作室",
audio_file="songs/starry_dream.mp3",
lyrics="在静谧的夜空下,星光点缀着梦想..."
)
create_batch_and_cards(song_template, "SONG", 200, "电子音乐卡片批次", 5)
templates.append(song_template)
# 2. 夏日恋曲
song2 = CardTemplate.objects.create(
name="夏日恋曲",
category="song",
description="活力四射的夏日流行歌曲",
card_type="seasonal",
rarity="rare",
price=29.99,
status="published",
published_at=timezone.now()
)
SongAttributes.objects.create(
template=song2,
genre="流行",
duration=datetime.timedelta(minutes=4, seconds=12),
bpm=128,
composer="阳光作曲",
lyricist="海滩诗人",
arrangement="夏日工作室",
audio_file="songs/summer_love.mp3",
lyrics="阳光沙滩,微风轻拂,那个夏天我们的故事..."
)
create_batch_and_cards(song2, "SONG", 150, "夏日流行歌曲卡片批次", 5)
templates.append(song2)
# 3. 古风水袖
song3 = CardTemplate.objects.create(
name="古风水袖",
category="song",
description="古典韵味的传统曲风,适合舞蹈伴奏",
card_type="regular",
rarity="legendary",
price=49.99,
status="published",
published_at=timezone.now()
)
SongAttributes.objects.create(
template=song3,
genre="古风",
duration=datetime.timedelta(minutes=5, seconds=30),
bpm=90,
composer="古韵大师",
lyricist="水墨词家",
arrangement="国乐团",
audio_file="songs/classical_sleeve_dance.mp3",
lyrics="水袖轻挥,倾城一笑,花落知多少..."
)
create_batch_and_cards(song3, "SONG", 100, "古风音乐卡片批次", 5)
templates.append(song3)
# 4. 电音节拍
song4 = CardTemplate.objects.create(
name="电音节拍",
category="song",
description="强劲的电子舞曲,适合派对氛围",
card_type="event",
rarity="uncommon",
price=24.99,
status="published",
published_at=timezone.now()
)
SongAttributes.objects.create(
template=song4,
genre="EDM",
duration=datetime.timedelta(minutes=3, seconds=15),
bpm=140,
composer="节拍大师",
lyricist="",
arrangement="混音工作室",
audio_file="songs/edm_beats.mp3",
lyrics=""
)
create_batch_and_cards(song4, "SONG", 180, "电音舞曲卡片批次", 5)
templates.append(song4)
# 5. 轻松爵士
song5 = CardTemplate.objects.create(
name="轻松爵士",
category="song",
description="悠扬的爵士乐,适合咖啡馆氛围",
card_type="regular",
rarity="common",
price=19.99,
status="published",
published_at=timezone.now()
)
SongAttributes.objects.create(
template=song5,
genre="爵士",
duration=datetime.timedelta(minutes=4, seconds=45),
bpm=95,
composer="蓝调乐队",
lyricist="",
arrangement="爵士工作室",
audio_file="songs/cafe_jazz.mp3",
lyrics=""
)
create_batch_and_cards(song5, "SONG", 200, "爵士音乐卡片批次", 5)
templates.append(song5)
return templates
def create_dance_templates():
"""创建舞蹈类卡牌模板"""
templates = []
# 1. 流行街舞基础
dance_template = CardTemplate.objects.create(
name="流行街舞基础",
category="dance",
description="适合初学者的街舞动作组合",
card_type="regular",
rarity="common",
price=49.99,
status="published",
published_at=timezone.now()
)
DanceAttributes.objects.create(
template=dance_template,
style="街舞",
difficulty="初级",
duration=datetime.timedelta(minutes=2, seconds=30),
choreographer="舞动工作室",
required_space="3平方米",
calories_burn=150,
tutorial_video="https://example.com/dance/tutorial/streetdance101"
)
create_batch_and_cards(dance_template, "DANCE", 150, "街舞基础动作卡片批次", 5)
templates.append(dance_template)
# 2. 古典芭蕾组合
dance2 = CardTemplate.objects.create(
name="古典芭蕾组合",
category="dance",
description="优雅的古典芭蕾舞蹈组合",
card_type="regular",
rarity="epic",
price=79.99,
status="published",
published_at=timezone.now()
)
DanceAttributes.objects.create(
template=dance2,
style="芭蕾",
difficulty="高级",
duration=datetime.timedelta(minutes=3, seconds=15),
choreographer="芭蕾舞团",
required_space="4平方米",
calories_burn=200,
tutorial_video="https://example.com/dance/tutorial/ballet_classic"
)
create_batch_and_cards(dance2, "DANCE", 80, "古典芭蕾卡片批次", 5)
templates.append(dance2)
# 3. 现代爵士舞
dance3 = CardTemplate.objects.create(
name="现代爵士舞",
category="dance",
description="充满活力的现代爵士舞组合",
card_type="regular",
rarity="uncommon",
price=59.99,
status="published",
published_at=timezone.now()
)
DanceAttributes.objects.create(
template=dance3,
style="爵士",
difficulty="中级",
duration=datetime.timedelta(minutes=2, seconds=45),
choreographer="节奏舞团",
required_space="3平方米",
calories_burn=180,
tutorial_video="https://example.com/dance/tutorial/modern_jazz"
)
create_batch_and_cards(dance3, "DANCE", 120, "爵士舞卡片批次", 5)
templates.append(dance3)
# 4. 拉丁探戈
dance4 = CardTemplate.objects.create(
name="拉丁探戈",
category="dance",
description="热情奔放的双人探戈舞",
card_type="regular",
rarity="rare",
price=69.99,
status="published",
published_at=timezone.now()
)
DanceAttributes.objects.create(
template=dance4,
style="拉丁",
difficulty="中高级",
duration=datetime.timedelta(minutes=3, seconds=0),
choreographer="拉丁舞团",
required_space="5平方米",
calories_burn=220,
tutorial_video="https://example.com/dance/tutorial/latin_tango"
)
create_batch_and_cards(dance4, "DANCE", 100, "拉丁舞卡片批次", 5)
templates.append(dance4)
# 5. 民族舞蹈
dance5 = CardTemplate.objects.create(
name="民族舞蹈",
category="dance",
description="传统民族特色舞蹈组合",
card_type="regular",
rarity="legendary",
price=89.99,
status="published",
published_at=timezone.now()
)
DanceAttributes.objects.create(
template=dance5,
style="民族舞",
difficulty="中级",
duration=datetime.timedelta(minutes=4, seconds=0),
choreographer="民族舞研究所",
required_space="4平方米",
calories_burn=190,
tutorial_video="https://example.com/dance/tutorial/folk_dance"
)
create_batch_and_cards(dance5, "DANCE", 90, "民族舞卡片批次", 5)
templates.append(dance5)
return templates
def create_furniture_templates():
"""创建家具类卡牌模板"""
templates = []
# 1. 北欧简约书桌
furniture_template = CardTemplate.objects.create(
name="北欧简约书桌",
category="furniture",
description="简约风格的实木书桌,适合学习工作",
card_type="regular",
rarity="rare",
price=599.99,
status="published",
published_at=timezone.now()
)
FurnitureAttributes.objects.create(
template=furniture_template,
furniture_type="书桌",
style="北欧简约",
material="橡木",
dimensions="120cm×60cm×75cm",
weight=25.5,
assembly_required=True,
max_weight_capacity=80.0,
care_instructions="避免阳光直射,定期上蜡保养"
)
create_batch_and_cards(furniture_template, "FURN", 30, "北欧风格家具卡片批次", 5)
templates.append(furniture_template)
# 2. 现代休闲沙发
furniture2 = CardTemplate.objects.create(
name="现代休闲沙发",
category="furniture",
description="舒适现代的三人座沙发,适合客厅使用",
card_type="regular",
rarity="epic",
price=1299.99,
status="published",
published_at=timezone.now()
)
FurnitureAttributes.objects.create(
template=furniture2,
furniture_type="沙发",
style="现代",
material="布艺,实木框架",
dimensions="220cm×90cm×85cm",
weight=65.0,
assembly_required=False,
max_weight_capacity=350.0,
care_instructions="定期吸尘,避免阳光直射,可拆卸布套清洗"
)
create_batch_and_cards(furniture2, "FURN", 20, "现代沙发卡片批次", 5)
templates.append(furniture2)
# 3. 复古实木餐桌
furniture3 = CardTemplate.objects.create(
name="复古实木餐桌",
category="furniture",
description="古朴风格的实木餐桌可容纳6人用餐",
card_type="regular",
rarity="uncommon",
price=899.99,
status="published",
published_at=timezone.now()
)
FurnitureAttributes.objects.create(
template=furniture3,
furniture_type="餐桌",
style="复古",
material="松木",
dimensions="180cm×90cm×76cm",
weight=45.0,
assembly_required=True,
max_weight_capacity=120.0,
care_instructions="避免水渍,定期打蜡保养"
)
create_batch_and_cards(furniture3, "FURN", 25, "复古餐桌卡片批次", 5)
templates.append(furniture3)
# 4. 工业风书架
furniture4 = CardTemplate.objects.create(
name="工业风书架",
category="furniture",
description="金属框架与实木搁板结合的工业风格书架",
card_type="regular",
rarity="common",
price=399.99,
status="published",
published_at=timezone.now()
)
FurnitureAttributes.objects.create(
template=furniture4,
furniture_type="书架",
style="工业风",
material="金属,实木",
dimensions="120cm×40cm×180cm",
weight=30.0,
assembly_required=True,
max_weight_capacity=150.0,
care_instructions="注意均匀分布重物,避免潮湿环境"
)
create_batch_and_cards(furniture4, "FURN", 40, "工业风书架卡片批次", 5)
templates.append(furniture4)
# 5. 日式榻榻米床
furniture5 = CardTemplate.objects.create(
name="日式榻榻米床",
category="furniture",
description="日式风格的低矮实木床,含榻榻米垫",
card_type="regular",
rarity="legendary",
price=1599.99,
status="published",
published_at=timezone.now()
)
FurnitureAttributes.objects.create(
template=furniture5,
furniture_type="",
style="日式",
material="柏木,天然草垫",
dimensions="200cm×180cm×35cm",
weight=70.0,
assembly_required=True,
max_weight_capacity=300.0,
care_instructions="保持干燥定期通风草垫需3-5年更换一次"
)
create_batch_and_cards(furniture5, "FURN", 15, "日式榻榻米卡片批次", 5)
templates.append(furniture5)
return templates
def create_decoration_templates():
"""创建装饰类卡牌模板"""
templates = []
# 1. 梦幻星空投影灯
decoration_template = CardTemplate.objects.create(
name="梦幻星空投影灯",
category="decoration",
description="可投影星空的LED灯营造浪漫氛围",
card_type="seasonal",
rarity="epic",
price=159.99,
status="published",
published_at=timezone.now()
)
DecorationAttributes.objects.create(
template=decoration_template,
decoration_type="投影灯",
style="梦幻",
material="塑料、LED",
size="15cm×15cm×20cm",
placement="桌面/床头",
indoor_outdoor="室内",
installation_required=False,
care_instructions="请用干布擦拭,避免进水"
)
create_batch_and_cards(decoration_template, "DECO", 80, "投影灯装饰卡片批次", 5)
templates.append(decoration_template)
# 2. 北欧风格挂画
decoration2 = CardTemplate.objects.create(
name="北欧风格挂画",
category="decoration",
description="简约北欧风格装饰画,适合客厅卧室",
card_type="regular",
rarity="uncommon",
price=89.99,
status="published",
published_at=timezone.now()
)
DecorationAttributes.objects.create(
template=decoration2,
decoration_type="壁画",
style="北欧简约",
material="帆布,实木框",
size="60cm×45cm",
placement="墙面",
indoor_outdoor="室内",
installation_required=True,
care_instructions="避免阳光直射,定期除尘"
)
create_batch_and_cards(decoration2, "DECO", 100, "北欧挂画卡片批次", 5)
templates.append(decoration2)
# 3. 复古台灯
decoration3 = CardTemplate.objects.create(
name="复古铜艺台灯",
category="decoration",
description="复古风格铜制台灯,温暖柔和的灯光",
card_type="regular",
rarity="rare",
price=129.99,
status="published",
published_at=timezone.now()
)
DecorationAttributes.objects.create(
template=decoration3,
decoration_type="台灯",
style="复古",
material="铜,布艺灯罩",
size="25cm×25cm×45cm",
placement="桌面",
indoor_outdoor="室内",
installation_required=False,
care_instructions="定期擦拭,避免潮湿环境"
)
create_batch_and_cards(decoration3, "DECO", 60, "复古台灯卡片批次", 5)
templates.append(decoration3)
# 4. 多肉植物组合
decoration4 = CardTemplate.objects.create(
name="多肉植物组合",
category="decoration",
description="精选多肉植物组合,带精美陶瓷花盆",
card_type="regular",
rarity="common",
price=59.99,
status="published",
published_at=timezone.now()
)
DecorationAttributes.objects.create(
template=decoration4,
decoration_type="植物",
style="自然",
material="陶瓷,植物",
size="15cm×15cm×10cm",
placement="窗台,桌面",
indoor_outdoor="室内",
installation_required=False,
care_instructions="避免阳光直射,一周浇水一次,冬季减少浇水"
)
create_batch_and_cards(decoration4, "DECO", 120, "多肉植物卡片批次", 5)
templates.append(decoration4)
# 5. 创意壁挂置物架
decoration5 = CardTemplate.objects.create(
name="创意壁挂置物架",
category="decoration",
description="几何造型的墙面置物架,既实用又装饰",
card_type="regular",
rarity="legendary",
price=199.99,
status="published",
published_at=timezone.now()
)
DecorationAttributes.objects.create(
template=decoration5,
decoration_type="置物架",
style="现代创意",
material="金属,实木",
size="60cm×20cm×60cm",
placement="墙面",
indoor_outdoor="室内",
installation_required=True,
care_instructions="注意承重,均匀分布物品重量"
)
create_batch_and_cards(decoration5, "DECO", 40, "壁挂置物架卡片批次", 5)
templates.append(decoration5)
return templates
def create_batch_and_cards(template, prefix, quantity, description, index=1):
"""创建批次和卡片实例"""
batch_number = generate_batch_number(prefix, template.id, index)
batch = CardBatch.objects.create(
batch_number=batch_number,
template=template,
category=template.category,
quantity=quantity,
description=description,
status="draft",
published=False,
published_at=None
)
# 根据需要创建实际的卡片样本(默认创建少量样本不是全部quantity)
sample_count = min(5, quantity) # 最多创建5张样本卡片
card_ids = []
# 创建样本卡片
for i in range(1, sample_count + 1):
unique_id = f"{batch_number}-{i:03d}"
Card.objects.create(
unique_id=unique_id,
template=template,
name=template.name,
category=template.category,
batch=batch,
price=template.price,
status="inactive" # 默认为未激活状态
)
card_ids.append(unique_id)
# 设置批次的起始ID和结束ID
if card_ids:
# 起始ID是第一张卡的ID
batch.start_id = f"{batch_number}-001"
# 结束ID是根据quantity计算的最后一张卡的ID
batch.end_id = f"{batch_number}-{quantity:03d}"
batch.save(update_fields=["start_id", "end_id"])
return batch