from django.db import models class Region(models.Model): """Region model for hierarchical administrative divisions.""" LEVEL_CHOICES = [ ('province', '省'), ('city', '市'), ('county', '县'), ('town', '乡镇/街道'), ('village', '村/居委会'), ] STATUS_CHOICES = [ ('active', '正常'), ('inactive', '停用'), ] name = models.CharField(max_length=100, verbose_name='版块名称') level = models.CharField(max_length=20, choices=LEVEL_CHOICES, verbose_name='版块级别') parent = models.ForeignKey( 'self', on_delete=models.CASCADE, null=True, blank=True, related_name='children', verbose_name='上级版块' ) status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='active', 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 = 'regions' verbose_name = '版块' verbose_name_plural = '版块' ordering = ['level', 'name'] def __str__(self): return self.name def get_full_path(self): """Get the full hierarchical path of this region.""" path = [self.name] parent = self.parent while parent: path.insert(0, parent.name) parent = parent.parent return ' → '.join(path) def get_children(self): """Get all direct children of this region.""" return self.children.filter(status='active')