feat: 中文化 django-admin 字段标签 (T-603)

This commit is contained in:
QiuSW
2026-07-04 16:27:45 +08:00
parent 4aceb3ae25
commit fb1037933d
14 changed files with 714 additions and 139 deletions
+3 -3
View File
@@ -40,7 +40,7 @@ class WalletAdjustmentForm(forms.Form):
@admin.register(User)
class UserAdmin(DjangoUserAdmin):
fieldsets = DjangoUserAdmin.fieldsets + (
("Cmhub", {"fields": ("payment_user_id", "status", "created_at")}),
("业务信息", {"fields": ("payment_user_id", "status", "created_at")}),
)
readonly_fields = ("created_at",)
list_display = (
@@ -58,7 +58,7 @@ class UserAdmin(DjangoUserAdmin):
def get_queryset(self, request):
return super().get_queryset(request).select_related("wallet")
@admin.display(description="points")
@admin.display(description="点数余额")
def wallet_points_balance(self, obj):
wallet = getattr(obj, "wallet", None)
return wallet.points_balance if wallet else 0
@@ -191,7 +191,7 @@ class ApiKeyAdmin(admin.ModelAdmin):
)
ordering = ("-created_at", "-id")
@admin.display(description="key hash")
@admin.display(description="Key 哈希")
def key_hash_masked(self, obj):
if not obj.key_hash:
return ""
@@ -0,0 +1,95 @@
# Generated by Django 5.2.15 on 2026-07-04 08:02
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('users', '0004_alter_apikey_options_alter_user_options_and_more'),
]
operations = [
migrations.AlterField(
model_name='apikey',
name='created_at',
field=models.DateTimeField(auto_now_add=True, verbose_name='创建时间'),
),
migrations.AlterField(
model_name='apikey',
name='key_hash',
field=models.CharField(editable=False, max_length=64, unique=True, verbose_name='API Key 哈希'),
),
migrations.AlterField(
model_name='apikey',
name='key_prefix',
field=models.CharField(editable=False, max_length=32, verbose_name='Key 前缀'),
),
migrations.AlterField(
model_name='apikey',
name='last_used_at',
field=models.DateTimeField(blank=True, null=True, verbose_name='最后使用时间'),
),
migrations.AlterField(
model_name='apikey',
name='name',
field=models.CharField(blank=True, max_length=80, verbose_name='名称'),
),
migrations.AlterField(
model_name='apikey',
name='status',
field=models.CharField(choices=[('active', '有效'), ('revoked', '已吊销')], default='active', max_length=20, verbose_name='状态'),
),
migrations.AlterField(
model_name='apikey',
name='updated_at',
field=models.DateTimeField(auto_now=True, verbose_name='更新时间'),
),
migrations.AlterField(
model_name='apikey',
name='user',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='api_keys', to=settings.AUTH_USER_MODEL, verbose_name='用户'),
),
migrations.AlterField(
model_name='user',
name='created_at',
field=models.DateTimeField(auto_now_add=True, verbose_name='创建时间'),
),
migrations.AlterField(
model_name='user',
name='email',
field=models.EmailField(max_length=254, unique=True, verbose_name='邮箱'),
),
migrations.AlterField(
model_name='user',
name='payment_user_id',
field=models.CharField(blank=True, help_text='外部支付系统用户标识,可为空。', max_length=128, verbose_name='支付系统用户 ID'),
),
migrations.AlterField(
model_name='user',
name='status',
field=models.CharField(choices=[('active', '正常'), ('disabled', '禁用')], default='active', max_length=20, verbose_name='状态'),
),
migrations.AlterField(
model_name='userwallet',
name='created_at',
field=models.DateTimeField(auto_now_add=True, verbose_name='创建时间'),
),
migrations.AlterField(
model_name='userwallet',
name='points_balance',
field=models.BigIntegerField(default=0, verbose_name='点数余额'),
),
migrations.AlterField(
model_name='userwallet',
name='updated_at',
field=models.DateTimeField(auto_now=True, verbose_name='更新时间'),
),
migrations.AlterField(
model_name='userwallet',
name='user',
field=models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, related_name='wallet', to=settings.AUTH_USER_MODEL, verbose_name='用户'),
),
]
+21 -16
View File
@@ -12,21 +12,23 @@ from django.db.models import Q
class User(AbstractUser):
class Status(models.TextChoices):
ACTIVE = "active", "Active"
DISABLED = "disabled", "Disabled"
ACTIVE = "active", "正常"
DISABLED = "disabled", "禁用"
email = models.EmailField("email address", unique=True)
email = models.EmailField("邮箱", unique=True)
payment_user_id = models.CharField(
"支付系统用户 ID",
max_length=128,
blank=True,
help_text="External payment system user identifier, if available.",
help_text="外部支付系统用户标识,可为空。",
)
status = models.CharField(
"状态",
max_length=20,
choices=Status.choices,
default=Status.ACTIVE,
)
created_at = models.DateTimeField(auto_now_add=True)
created_at = models.DateTimeField("创建时间", auto_now_add=True)
@property
def is_business_active(self) -> bool:
@@ -41,12 +43,13 @@ class User(AbstractUser):
class UserWallet(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL,
verbose_name="用户",
on_delete=models.PROTECT,
related_name="wallet",
)
points_balance = models.BigIntegerField(default=0)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
points_balance = models.BigIntegerField("点数余额", default=0)
created_at = models.DateTimeField("创建时间", auto_now_add=True)
updated_at = models.DateTimeField("更新时间", auto_now=True)
class Meta:
db_table = "user_wallet"
@@ -68,25 +71,27 @@ class ApiKey(models.Model):
KEY_PREFIX_LENGTH = 16
class Status(models.TextChoices):
ACTIVE = "active", "Active"
REVOKED = "revoked", "Revoked"
ACTIVE = "active", "有效"
REVOKED = "revoked", "已吊销"
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
verbose_name="用户",
on_delete=models.PROTECT,
related_name="api_keys",
)
name = models.CharField(max_length=80, blank=True)
key_hash = models.CharField(max_length=64, unique=True, editable=False)
key_prefix = models.CharField(max_length=32, editable=False)
name = models.CharField("名称", max_length=80, blank=True)
key_hash = models.CharField("API Key 哈希", max_length=64, unique=True, editable=False)
key_prefix = models.CharField("Key 前缀", max_length=32, editable=False)
status = models.CharField(
"状态",
max_length=20,
choices=Status.choices,
default=Status.ACTIVE,
)
last_used_at = models.DateTimeField(null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
last_used_at = models.DateTimeField("最后使用时间", null=True, blank=True)
created_at = models.DateTimeField("创建时间", auto_now_add=True)
updated_at = models.DateTimeField("更新时间", auto_now=True)
class Meta:
db_table = "api_key"