from django.db import models from core.models.base import UUIDPrimaryKeyModel class LookupGroup(UUIDPrimaryKeyModel): module = models.CharField( max_length=50, verbose_name="所属模块", help_text="client / property", ) key = models.CharField( max_length=100, verbose_name="分组 key", help_text="如 source / follow_purpose", ) label_zh = models.CharField( max_length=50, verbose_name="分组中文名", help_text="界面显示名称,如「客源来源」", ) description = models.TextField( blank=True, default="", verbose_name="分组说明", help_text="前端 tooltip 使用", ) sort_order = models.SmallIntegerField( default=0, verbose_name="排序", ) created_at = models.DateTimeField( auto_now_add=True, verbose_name="创建时间", ) updated_at = models.DateTimeField( auto_now=True, verbose_name="更新时间", ) class Meta: db_table = "lookup_groups" verbose_name = "查找组" verbose_name_plural = "查找组" constraints = [ models.UniqueConstraint( fields=["module", "key"], name="uq_lookup_groups_module_key" ), ] class LookupItem(UUIDPrimaryKeyModel): group = models.ForeignKey( LookupGroup, on_delete=models.CASCADE, related_name="items", verbose_name="所属分组", ) value = models.CharField( max_length=100, verbose_name="存储值", help_text="英文 snake_case,如 door_to_door;写入后只读", ) label_zh = models.CharField( max_length=50, verbose_name="显示文本", help_text="如「上门」", ) is_system = models.BooleanField( default=False, verbose_name="是否系统预制", help_text="True=系统预制不可物理删除,仅可停用", ) is_active = models.BooleanField( default=True, verbose_name="是否启用", help_text="False 后录入下拉不展示,历史记录保留并展示「(已停用)」后缀", ) sort_order = models.SmallIntegerField( default=0, verbose_name="排序", ) created_by = models.ForeignKey( "org.Staff", null=True, blank=True, on_delete=models.SET_NULL, related_name="created_lookup_items", verbose_name="创建人", help_text="系统预制时为 NULL", ) created_at = models.DateTimeField( auto_now_add=True, verbose_name="创建时间", ) updated_at = models.DateTimeField( auto_now=True, verbose_name="更新时间", ) class Meta: db_table = "lookup_items" verbose_name = "查找项" verbose_name_plural = "查找项" constraints = [ models.UniqueConstraint( fields=["group", "value"], name="uq_lookup_items_group_value" ), ] indexes = [ models.Index( fields=["group", "is_active", "sort_order"], name="idx_lookup_items_active", ), ]