feat(migrations): add Phase 4.0+4.1 verbose_name/help_text migrations
Generated by manage.py makemigrations after Phase 4.0 (model Meta verbose_name) and Phase 4.1 (field-level verbose_name/help_text) were committed across all 9 apps. Field-meta only (Alter field on Meta options); no schema changes.
This commit is contained in:
@@ -0,0 +1,146 @@
|
||||
# Generated by Django 4.2.16 on 2026-04-30 01:46
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('org', '0003_alter_orgunit_address_city_and_more'),
|
||||
('account', '0003_alter_loginattempt_options_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='loginattempt',
|
||||
name='attempted_at',
|
||||
field=models.DateTimeField(auto_now_add=True, help_text='分区键,按月分区', verbose_name='尝试时间'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='loginattempt',
|
||||
name='failure_reason',
|
||||
field=models.CharField(blank=True, choices=[('wrong_password', '用户名或密码错误'), ('wrong_captcha', '验证码错误'), ('account_locked', '账号锁定'), ('account_disabled', '账号停用'), ('tenant_not_found', '租户不存在')], help_text='wrong_password=密码错误 / wrong_captcha=验证码失败 / account_locked=账号锁定 / account_disabled=账号停用 / tenant_not_found=租户不存在', max_length=30, null=True, verbose_name='失败原因'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='loginattempt',
|
||||
name='ip_address',
|
||||
field=models.GenericIPAddressField(help_text='支持 IPv4/IPv6', verbose_name='来源 IP'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='loginattempt',
|
||||
name='success',
|
||||
field=models.BooleanField(verbose_name='是否登录成功'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='loginattempt',
|
||||
name='user_agent',
|
||||
field=models.TextField(blank=True, help_text='Electron 版本信息', null=True, verbose_name='客户端 UA'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='loginattempt',
|
||||
name='username',
|
||||
field=models.CharField(help_text='冗余存储,即使账号不存在也记录', max_length=30, verbose_name='登录用户名'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='passwordhistory',
|
||||
name='created_at',
|
||||
field=models.DateTimeField(auto_now_add=True, help_text='密码修改时间', verbose_name='记录时间'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='passwordhistory',
|
||||
name='password_hash',
|
||||
field=models.CharField(help_text='PBKDF2+SHA256 哈希值', max_length=128, verbose_name='密码哈希'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='passwordhistory',
|
||||
name='user',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='password_histories', to=settings.AUTH_USER_MODEL, verbose_name='关联账号'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='passwordresettoken',
|
||||
name='created_at',
|
||||
field=models.DateTimeField(auto_now_add=True, verbose_name='创建时间'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='passwordresettoken',
|
||||
name='expires_at',
|
||||
field=models.DateTimeField(help_text='created_at + 30 分钟', verbose_name='过期时间'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='passwordresettoken',
|
||||
name='is_used',
|
||||
field=models.BooleanField(default=False, help_text='使用后立即置 True,防止重放攻击', verbose_name='是否已使用'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='passwordresettoken',
|
||||
name='token',
|
||||
field=models.CharField(help_text='secrets.token_urlsafe(64) 生成(86 字符),全局唯一', max_length=86, unique=True, verbose_name='令牌'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='passwordresettoken',
|
||||
name='user',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reset_tokens', to=settings.AUTH_USER_MODEL, verbose_name='关联账号'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='useraccount',
|
||||
name='created_at',
|
||||
field=models.DateTimeField(auto_now_add=True, verbose_name='创建时间'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='useraccount',
|
||||
name='created_by',
|
||||
field=models.ForeignKey(blank=True, help_text='普通员工由 Tenant Admin 创建;Tenant Admin 由平台运营创建(可为 NULL)', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='created_accounts', to=settings.AUTH_USER_MODEL, verbose_name='创建人'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='useraccount',
|
||||
name='email',
|
||||
field=models.EmailField(blank=True, help_text='用于找回密码/用户名;为空则无法自助找回;同租户唯一', max_length=254, null=True, verbose_name='绑定邮箱'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='useraccount',
|
||||
name='is_initial_password',
|
||||
field=models.BooleanField(default=True, help_text='True 时登录成功后强制跳转修改密码页,不可跳过', verbose_name='是否初始密码'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='useraccount',
|
||||
name='is_tenant_admin',
|
||||
field=models.BooleanField(default=False, help_text='每个租户最多 1 个(应用层约束)', verbose_name='是否租户超管'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='useraccount',
|
||||
name='locked_until',
|
||||
field=models.DateTimeField(blank=True, help_text='到期后应用层将 status 恢复 active', null=True, verbose_name='锁定到期时间'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='useraccount',
|
||||
name='phone_enc',
|
||||
field=models.TextField(blank=True, help_text='AES-256-GCM 加密密文;普通员工必填', null=True, verbose_name='手机号(加密)'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='useraccount',
|
||||
name='phone_hash',
|
||||
field=models.CharField(blank=True, help_text='SHA-256 哈希;用于唯一性校验和查询;不可反推原文', max_length=64, null=True, verbose_name='手机号哈希'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='useraccount',
|
||||
name='staff',
|
||||
field=models.OneToOneField(blank=True, help_text='员工档案绑定(1:1);普通员工必须有值;Tenant Admin 可为空', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='account', to='org.staff', verbose_name='员工档案'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='useraccount',
|
||||
name='status',
|
||||
field=models.CharField(choices=[('active', '启用'), ('disabled', '停用'), ('locked', '锁定')], default='active', help_text='active=正常 / disabled=停用 / locked=锁定(30 分钟自动恢复)', max_length=10, verbose_name='账号状态'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='useraccount',
|
||||
name='updated_at',
|
||||
field=models.DateTimeField(auto_now=True, verbose_name='最后更新时间'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='useraccount',
|
||||
name='username',
|
||||
field=models.CharField(help_text='普通员工=手机号(11位数字) / Tenant Admin=自定义(字母开头6~30位);创建后不可更改', max_length=30, verbose_name='登录名'),
|
||||
),
|
||||
]
|
||||
Reference in New Issue
Block a user