from django.db import models class Material(models.Model): """ 材料模型 """ MAJOR_CATEGORY_CHOICES = ( ('architecture', '建筑'), ('landscape', '景观'), ('equipment', '设备'), ('decoration', '装修'), ) REPLACE_TYPE_CHOICES = ( ('alternative', '平替'), ('new_development', '新研发'), ) ADVANTAGE_CHOICES = ( ('quality', '品质'), ('cost', '成本'), ) APPLICATION_SCENE_CHOICES = ( ('fu', '府系'), ('jing', '境系'), ('cheng', '城系'), ('zhu', '住系'), ('affordable', '保障房'), ) STAR_LEVEL_CHOICES = ( (1, '1星'), (2, '2星'), (3, '3星'), ) STATUS_CHOICES = ( ('draft', '创建中'), ('pending', '待审核'), ('approved', '已审核'), ) name = models.CharField(max_length=255, verbose_name='材料名称') major_category = models.CharField(max_length=20, choices=MAJOR_CATEGORY_CHOICES, verbose_name='专业类别') material_category = models.CharField(max_length=255, verbose_name='材料分类') material_subcategory = models.CharField(max_length=255, verbose_name='材料子分类') spec = models.CharField(max_length=255, blank=True, null=True, verbose_name='规格型号') standard = models.CharField(max_length=255, blank=True, null=True, verbose_name='符合标准') application_scene = models.CharField(max_length=20, choices=APPLICATION_SCENE_CHOICES, blank=True, null=True, verbose_name='应用场景') application_desc = models.TextField(blank=True, null=True, verbose_name='应用场景说明') replace_type = models.CharField(max_length=20, choices=REPLACE_TYPE_CHOICES, blank=True, null=True, verbose_name='替代材料类型') advantage = models.CharField(max_length=20, choices=ADVANTAGE_CHOICES, blank=True, null=True, verbose_name='竞争优势') advantage_desc = models.TextField(blank=True, null=True, verbose_name='优势说明') cost_compare = models.DecimalField(max_digits=5, decimal_places=2, blank=True, null=True, verbose_name='成本对比百分数') cost_desc = models.TextField(blank=True, null=True, verbose_name='成本说明') cases = models.TextField(blank=True, null=True, verbose_name='案例') brochure = models.ImageField(upload_to='material_brochures/', blank=True, null=True, verbose_name='宣传页图片') quality_level = models.IntegerField(choices=STAR_LEVEL_CHOICES, blank=True, null=True, verbose_name='质量提升等级') durability_level = models.IntegerField(choices=STAR_LEVEL_CHOICES, blank=True, null=True, verbose_name='耐久可靠等级') eco_level = models.IntegerField(choices=STAR_LEVEL_CHOICES, blank=True, null=True, verbose_name='环保健康等级') carbon_level = models.IntegerField(choices=STAR_LEVEL_CHOICES, blank=True, null=True, verbose_name='循环低碳等级') score_level = models.IntegerField(choices=STAR_LEVEL_CHOICES, blank=True, null=True, verbose_name='总评分等级') connection_method = models.CharField(max_length=255, blank=True, null=True, verbose_name='连接方式') construction_method = models.CharField(max_length=255, blank=True, null=True, verbose_name='施工工艺') limit_condition = models.TextField(blank=True, null=True, verbose_name='限制条件') factory = models.ForeignKey('factory.Factory', on_delete=models.CASCADE, related_name='materials', verbose_name='所属工厂') status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='draft', verbose_name='状态') created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间') class Meta: verbose_name = '材料' verbose_name_plural = '材料' db_table = 'material' def __str__(self): return self.name