926 lines
28 KiB
Python
926 lines
28 KiB
Python
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 |