116 lines
5.1 KiB
Python
116 lines
5.1 KiB
Python
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.JSONField(default=list, 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.JSONField(default=list, 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
|
|
|
|
|
|
class MaterialCategory(models.Model):
|
|
"""
|
|
材料分类
|
|
"""
|
|
name = models.CharField(max_length=255, verbose_name='分类名称')
|
|
value = models.CharField(max_length=255, unique=True, 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_category'
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
|
|
class MaterialSubcategory(models.Model):
|
|
"""
|
|
材料子分类
|
|
"""
|
|
category = models.ForeignKey(MaterialCategory, on_delete=models.CASCADE, related_name='subcategories', verbose_name='所属分类')
|
|
name = models.CharField(max_length=255, verbose_name='子分类名称')
|
|
value = models.CharField(max_length=255, unique=True, 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_subcategory'
|
|
|
|
def __str__(self):
|
|
return self.name
|