from django.db import models import uuid class CardTemplate(models.Model): """扑克牌模板模型(经典/现代/卡通/复古 4 套预设)""" id = models.CharField(max_length=50, primary_key=True) # 'classic', 'modern', etc. name = models.CharField(max_length=100) description = models.TextField() preview_image = models.ImageField(upload_to='templates/previews/', null=True) # 默认配色方案 color_spade = models.CharField(max_length=20, default='#000000') color_heart = models.CharField(max_length=20, default='#FF0000') color_club = models.CharField(max_length=20, default='#000000') color_diamond = models.CharField(max_length=20, default='#FF0000') color_background = models.CharField(max_length=20, default='#FFFFFF') # 模板绑定的预设主题(指向 LibraryAsset.theme_id) # 例如 'classical' 模板 → 使用 LibraryAsset.theme_id='classical' 的所有素材 theme_id = models.CharField(max_length=50, blank=True, default='classical') # 模板级 design 覆盖:background_color / border_color / pip_size_ratio 等 # 不填则走全局默认 design_override = models.JSONField(default=dict) # 默认素材路径(JSON,保留字段兼容老逻辑) default_assets = models.JSONField(default=dict) created_at = models.DateTimeField(auto_now_add=True) def __str__(self): return self.name class Meta: ordering = ['name'] class SuitSymbol(models.Model): """花色图案模板""" template = models.ForeignKey(CardTemplate, on_delete=models.CASCADE, related_name='suit_symbols') suit_name = models.CharField(max_length=20) # 'spade', 'heart', 'club', 'diamond' svg_path = models.TextField() # SVG路径数据 color = models.CharField(max_length=20) def __str__(self): return f"{self.template.name} - {self.suit_name}"