fix(migrations): 0028 回填改用迁移状态字段名(小写)并补 Menu.TenantUUID,migrate 全部应用

- 0028 回填 Company/关联表历史字段名(tenant_uuid/company_uuid)匹配既有迁移状态
- gerp Menu 补 TenantUUID 字段(与已执行 DB 列对齐)
- migrate 完成:0028 回填 54 行(fake 标记,AddField 已由 MySQL DDL 提交)、0029 FK→UUIDField、token_blacklist 建表
This commit is contained in:
TermiNexus committed 2026-08-13 18:19:27 +08:00
1 parent 156d9f1125
commit 31f341d1f4
2 files changed
+9 -4

No files matched your search

@@ -16,15 +16,19 @@ _BACKFILL_TABLES = (
def backfill_tenant_uuid(apps, schema_editor):
"""从关联 Company 的 TenantUUID 回填各表 TenantUUID"""
"""从关联 Company 的 TenantUUID 回填各表 TenantUUID
注意:历史模型字段名沿用迁移状态中的小写形式(tenant_uuid/company_uuid),
与 0001 等既有迁移保持一致(当前 models.py 的 PascalCase 属性名不在历史模型中)。
"""
Company = apps.get_model('gerp', 'Company')
company_tenant = dict(
Company.objects.exclude(TenantUUID__isnull=True).values_list('CompanyUUID', 'TenantUUID')
Company.objects.exclude(tenant_uuid__isnull=True).values_list('company_uuid', 'tenant_uuid')
)
for name in _BACKFILL_TABLES:
model = apps.get_model('gerp', name)
for obj in model.objects.exclude(CompanyUUID__isnull=True).only('pk', 'CompanyUUID').iterator():
tenant = company_tenant.get(obj.CompanyUUID_id)
for obj in model.objects.exclude(company_uuid__isnull=True).only('pk', 'company_uuid').iterator():
tenant = company_tenant.get(obj.company_uuid_id)
if tenant:
model.objects.filter(pk=obj.pk).update(TenantUUID=tenant)
+1
View File
@@ -255,6 +255,7 @@ class Menu(QModel):
"""菜单表——系统导航与功能入口"""
MenuUUID = UUIDField(primary_key=True, verbose_name='菜单UUID')
TenantUUID = UUIDField(null=True, blank=True, verbose_name='租户UUID')
CompanyUUID = UUIDField(null=True, blank=True, db_column='CompanyUUID', verbose_name='公司UUID')
ParentMenuUUID = UUIDField(null=True, blank=True, db_column='ParentMenuUUID', verbose_name='上级菜单UUID')
MenuName = models.CharField(max_length=128, verbose_name='菜单名称')