feat(models): add Chinese verbose_name to all 74 models (Phase 4.0)
为所有 Django 模型添加 Meta.verbose_name 和 verbose_name_plural(中文表名), 覆盖 10 个 app 的全部 74 个业务模型。 Phase 4.0 范围: - 仅 Meta 类级别中文名(用于 Django Admin、drf-spectacular OpenAPI title、错误信息) - 字段级 verbose_name= 和 help_text= 留待 Phase 4.1(待 PM 补全 DATA_MODEL 后同步) 变更: - 20 个 models 文件改动(每个模型 +2 行) - 8 个 0002/0003 迁移文件(Meta options 变更) - apps/tenant/migrations/0001_initial.py(之前漏生成的 tenant 模型迁移) manage.py check: 0 issues。
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
# Generated by Django 4.2.16 on 2026-04-29 11:07
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('account', '0002_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='loginattempt',
|
||||
options={'verbose_name': '登录尝试记录', 'verbose_name_plural': '登录尝试记录'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='passwordhistory',
|
||||
options={'ordering': ['-created_at'], 'verbose_name': '历史密码', 'verbose_name_plural': '历史密码'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='passwordresettoken',
|
||||
options={'verbose_name': '密码重置令牌', 'verbose_name_plural': '密码重置令牌'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='useraccount',
|
||||
options={'verbose_name': '用户账号', 'verbose_name_plural': '用户账号'},
|
||||
),
|
||||
]
|
||||
@@ -57,6 +57,8 @@ class UserAccount(AbstractBaseUser):
|
||||
|
||||
class Meta:
|
||||
db_table = "user_accounts"
|
||||
verbose_name = "用户账号"
|
||||
verbose_name_plural = "用户账号"
|
||||
constraints = [
|
||||
models.UniqueConstraint(fields=["username"], name="uq_user_accounts_username"),
|
||||
models.UniqueConstraint(
|
||||
@@ -102,6 +104,8 @@ class LoginAttempt(models.Model):
|
||||
|
||||
class Meta:
|
||||
db_table = "login_attempts"
|
||||
verbose_name = "登录尝试记录"
|
||||
verbose_name_plural = "登录尝试记录"
|
||||
indexes = [
|
||||
models.Index(fields=["username"], name="idx_login_attempts_username"),
|
||||
models.Index(fields=["ip_address"], name="idx_login_attempts_ip"),
|
||||
@@ -126,6 +130,8 @@ class PasswordResetToken(models.Model):
|
||||
|
||||
class Meta:
|
||||
db_table = "password_reset_tokens"
|
||||
verbose_name = "密码重置令牌"
|
||||
verbose_name_plural = "密码重置令牌"
|
||||
indexes = [
|
||||
models.Index(fields=["user"], name="idx_pw_reset_tokens_user"),
|
||||
]
|
||||
@@ -145,6 +151,8 @@ class PasswordHistory(models.Model):
|
||||
|
||||
class Meta:
|
||||
db_table = "password_histories"
|
||||
verbose_name = "历史密码"
|
||||
verbose_name_plural = "历史密码"
|
||||
ordering = ["-created_at"]
|
||||
indexes = [
|
||||
models.Index(fields=["user", "-created_at"], name="idx_pw_histories_user"),
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
# Generated by Django 4.2.16 on 2026-04-29 11:07
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('fonrey_client', '0002_partitions_and_triggers'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='client',
|
||||
options={'verbose_name': '客源', 'verbose_name_plural': '客源'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='clientcontact',
|
||||
options={'verbose_name': '客源联系人', 'verbose_name_plural': '客源联系人'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='clientfavoritefolder',
|
||||
options={'verbose_name': '私客收藏夹', 'verbose_name_plural': '私客收藏夹'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='clientfolderitem',
|
||||
options={'verbose_name': '收藏夹中的客源', 'verbose_name_plural': '收藏夹中的客源'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='clientfollowlog',
|
||||
options={'managed': False, 'verbose_name': '客源跟进日志', 'verbose_name_plural': '客源跟进日志'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='clientfollowlogattachment',
|
||||
options={'verbose_name': '客源跟进附件', 'verbose_name_plural': '客源跟进附件'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='clientpropertymatch',
|
||||
options={'verbose_name': '智能配房', 'verbose_name_plural': '智能配房'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='clientrequirement',
|
||||
options={'verbose_name': '客源需求', 'verbose_name_plural': '客源需求'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='clientschoolpreference',
|
||||
options={'verbose_name': '意向学校', 'verbose_name_plural': '意向学校'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='clientstatuslog',
|
||||
options={'verbose_name': '客源状态变更日志', 'verbose_name_plural': '客源状态变更日志'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='clientviewing',
|
||||
options={'verbose_name': '带看记录', 'verbose_name_plural': '带看记录'},
|
||||
),
|
||||
]
|
||||
@@ -47,6 +47,8 @@ class ClientContact(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "client_contacts"
|
||||
verbose_name = "客源联系人"
|
||||
verbose_name_plural = "客源联系人"
|
||||
indexes = [
|
||||
models.Index(fields=["phone_hash"], name="idx_cc_phone_hash"),
|
||||
models.Index(fields=["phone2_hash"], name="idx_cc_phone2_hash"),
|
||||
@@ -118,6 +120,8 @@ class ClientRequirement(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "client_requirements"
|
||||
verbose_name = "客源需求"
|
||||
verbose_name_plural = "客源需求"
|
||||
indexes = [
|
||||
models.Index(fields=["client"], name="idx_creq_client"),
|
||||
models.Index(fields=["requirement_type", "client"], name="idx_creq_type"),
|
||||
@@ -138,6 +142,8 @@ class ClientSchoolPreference(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "client_school_preferences"
|
||||
verbose_name = "意向学校"
|
||||
verbose_name_plural = "意向学校"
|
||||
indexes = [
|
||||
models.Index(fields=["requirement"], name="idx_csp_requirement"),
|
||||
]
|
||||
|
||||
@@ -131,6 +131,8 @@ class Client(AuditedModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "clients"
|
||||
verbose_name = "客源"
|
||||
verbose_name_plural = "客源"
|
||||
indexes = [
|
||||
models.Index(fields=["client_type", "status"], name="idx_clients_type_stat"),
|
||||
models.Index(fields=["owner"], name="idx_clients_owner"),
|
||||
|
||||
@@ -15,6 +15,8 @@ class ClientFavoriteFolder(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "client_favorite_folders"
|
||||
verbose_name = "私客收藏夹"
|
||||
verbose_name_plural = "私客收藏夹"
|
||||
indexes = [
|
||||
models.Index(fields=["staff"], name="idx_cff_staff"),
|
||||
]
|
||||
@@ -38,6 +40,8 @@ class ClientFolderItem(models.Model):
|
||||
|
||||
class Meta:
|
||||
db_table = "client_folder_items"
|
||||
verbose_name = "收藏夹中的客源"
|
||||
verbose_name_plural = "收藏夹中的客源"
|
||||
constraints = [
|
||||
models.UniqueConstraint(
|
||||
fields=["folder", "client"], name="uq_cfi_folder_client"
|
||||
|
||||
@@ -36,6 +36,8 @@ class ClientFollowLog(models.Model):
|
||||
|
||||
class Meta:
|
||||
db_table = "client_follow_logs"
|
||||
verbose_name = "客源跟进日志"
|
||||
verbose_name_plural = "客源跟进日志"
|
||||
managed = False
|
||||
unique_together = (("id", "created_at"),)
|
||||
|
||||
@@ -52,4 +54,6 @@ class ClientFollowLogAttachment(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "client_follow_log_attachments"
|
||||
verbose_name = "客源跟进附件"
|
||||
verbose_name_plural = "客源跟进附件"
|
||||
indexes = [models.Index(fields=["follow_log_id"], name="idx_cfla_log")]
|
||||
|
||||
@@ -57,6 +57,8 @@ class ClientViewing(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "client_viewings"
|
||||
verbose_name = "带看记录"
|
||||
verbose_name_plural = "带看记录"
|
||||
indexes = [
|
||||
models.Index(
|
||||
fields=["client", "-viewing_start_at"], name="idx_cv_client_time"
|
||||
@@ -107,6 +109,8 @@ class ClientPropertyMatch(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "client_property_matches"
|
||||
verbose_name = "智能配房"
|
||||
verbose_name_plural = "智能配房"
|
||||
constraints = [
|
||||
models.UniqueConstraint(
|
||||
fields=["client", "property"], name="uq_client_match_pair"
|
||||
@@ -141,6 +145,8 @@ class ClientStatusLog(models.Model):
|
||||
|
||||
class Meta:
|
||||
db_table = "client_status_logs"
|
||||
verbose_name = "客源状态变更日志"
|
||||
verbose_name_plural = "客源状态变更日志"
|
||||
indexes = [
|
||||
models.Index(fields=["client", "-operated_at"], name="idx_csl_client"),
|
||||
models.Index(fields=["change_type", "-operated_at"], name="idx_csl_type"),
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
# Generated by Django 4.2.16 on 2026-04-29 11:07
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('fonrey_complex', '0002_pg_trgm_and_search_vector'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='building',
|
||||
options={'ordering': ['complex_id', 'name'], 'verbose_name': '楼栋', 'verbose_name_plural': '楼栋'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='complex',
|
||||
options={'ordering': ['name'], 'verbose_name': '楼盘', 'verbose_name_plural': '楼盘'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='complexalias',
|
||||
options={'ordering': ['complex_id', 'alias'], 'verbose_name': '楼盘别名', 'verbose_name_plural': '楼盘别名'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='complexattachment',
|
||||
options={'ordering': ['complex_id', 'sort_order'], 'verbose_name': '楼盘附件', 'verbose_name_plural': '楼盘附件'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='complexbusinessarea',
|
||||
options={'verbose_name': '楼盘商圈关联', 'verbose_name_plural': '楼盘商圈关联'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='complexmetrostation',
|
||||
options={'verbose_name': '楼盘地铁站关联', 'verbose_name_plural': '楼盘地铁站关联'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='complexphoto',
|
||||
options={'ordering': ['complex_id', 'sort_order'], 'verbose_name': '楼盘照片', 'verbose_name_plural': '楼盘照片'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='complexpricetrend',
|
||||
options={'ordering': ['complex_id', '-record_month'], 'verbose_name': '楼盘价格走势', 'verbose_name_plural': '楼盘价格走势'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='complexschool',
|
||||
options={'verbose_name': '楼盘学校关联', 'verbose_name_plural': '楼盘学校关联'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='roomunit',
|
||||
options={'ordering': ['building_id', '-floor', 'room_no'], 'verbose_name': '房号单元', 'verbose_name_plural': '房号单元'},
|
||||
),
|
||||
]
|
||||
@@ -133,6 +133,8 @@ class Complex(SoftDeleteModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "complexes"
|
||||
verbose_name = "楼盘"
|
||||
verbose_name_plural = "楼盘"
|
||||
indexes = [
|
||||
models.Index(
|
||||
fields=["district"],
|
||||
@@ -176,6 +178,8 @@ class ComplexAlias(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "complex_aliases"
|
||||
verbose_name = "楼盘别名"
|
||||
verbose_name_plural = "楼盘别名"
|
||||
indexes = [
|
||||
models.Index(fields=["complex"], name="idx_complex_aliases_complex"),
|
||||
]
|
||||
@@ -200,6 +204,8 @@ class ComplexBusinessArea(models.Model):
|
||||
|
||||
class Meta:
|
||||
db_table = "complex_business_areas"
|
||||
verbose_name = "楼盘商圈关联"
|
||||
verbose_name_plural = "楼盘商圈关联"
|
||||
constraints = [
|
||||
models.UniqueConstraint(
|
||||
fields=["complex", "business_area"],
|
||||
@@ -233,6 +239,8 @@ class ComplexSchool(models.Model):
|
||||
|
||||
class Meta:
|
||||
db_table = "complex_schools"
|
||||
verbose_name = "楼盘学校关联"
|
||||
verbose_name_plural = "楼盘学校关联"
|
||||
constraints = [
|
||||
models.UniqueConstraint(
|
||||
fields=["complex", "school"],
|
||||
@@ -259,6 +267,8 @@ class ComplexMetroStation(models.Model):
|
||||
|
||||
class Meta:
|
||||
db_table = "complex_metro_stations"
|
||||
verbose_name = "楼盘地铁站关联"
|
||||
verbose_name_plural = "楼盘地铁站关联"
|
||||
constraints = [
|
||||
models.UniqueConstraint(
|
||||
fields=["complex", "station"],
|
||||
@@ -307,6 +317,8 @@ class Building(TimeStampedModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "buildings"
|
||||
verbose_name = "楼栋"
|
||||
verbose_name_plural = "楼栋"
|
||||
indexes = [
|
||||
models.Index(
|
||||
fields=["complex"],
|
||||
@@ -342,6 +354,8 @@ class RoomUnit(TimeStampedModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "room_units"
|
||||
verbose_name = "房号单元"
|
||||
verbose_name_plural = "房号单元"
|
||||
indexes = [
|
||||
models.Index(
|
||||
fields=["building"],
|
||||
@@ -388,6 +402,8 @@ class ComplexPhoto(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "complex_photos"
|
||||
verbose_name = "楼盘照片"
|
||||
verbose_name_plural = "楼盘照片"
|
||||
indexes = [
|
||||
models.Index(fields=["complex"], name="idx_complex_photos_complex"),
|
||||
models.Index(fields=["complex", "category"], name="idx_complex_photos_category"),
|
||||
@@ -424,6 +440,8 @@ class ComplexAttachment(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "complex_attachments"
|
||||
verbose_name = "楼盘附件"
|
||||
verbose_name_plural = "楼盘附件"
|
||||
ordering = ["complex_id", "sort_order"]
|
||||
|
||||
|
||||
@@ -442,6 +460,8 @@ class ComplexPriceTrend(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "complex_price_trends"
|
||||
verbose_name = "楼盘价格走势"
|
||||
verbose_name_plural = "楼盘价格走势"
|
||||
constraints = [
|
||||
models.UniqueConstraint(
|
||||
fields=["complex", "record_month"],
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
# Generated by Django 4.2.16 on 2026-04-29 11:07
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('org', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='orgunit',
|
||||
options={'ordering': ['sort_order', 'name'], 'verbose_name': '组织节点', 'verbose_name_plural': '组织节点'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='staff',
|
||||
options={'verbose_name': '员工', 'verbose_name_plural': '员工'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='staffaccount',
|
||||
options={'verbose_name': '员工第三方账号', 'verbose_name_plural': '员工第三方账号'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='staffeducation',
|
||||
options={'verbose_name': '教育经历', 'verbose_name_plural': '教育经历'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='stafffamilymember',
|
||||
options={'verbose_name': '家庭成员', 'verbose_name_plural': '家庭成员'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='staffpersonalinfo',
|
||||
options={'verbose_name': '员工个人信息', 'verbose_name_plural': '员工个人信息'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='staffremark',
|
||||
options={'verbose_name': '员工备注', 'verbose_name_plural': '员工备注'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='staffrewardpunish',
|
||||
options={'verbose_name': '奖惩记录', 'verbose_name_plural': '奖惩记录'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='stafftraining',
|
||||
options={'verbose_name': '培训记录', 'verbose_name_plural': '培训记录'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='stafftransferlog',
|
||||
options={'verbose_name': '人事异动记录', 'verbose_name_plural': '人事异动记录'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='staffworkexperience',
|
||||
options={'verbose_name': '工作经历', 'verbose_name_plural': '工作经历'},
|
||||
),
|
||||
]
|
||||
@@ -46,6 +46,8 @@ class OrgUnit(SoftDeleteModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "org_units"
|
||||
verbose_name = "组织节点"
|
||||
verbose_name_plural = "组织节点"
|
||||
indexes = [
|
||||
models.Index(fields=["parent"], name="idx_org_units_parent"),
|
||||
models.Index(fields=["type"], name="idx_org_units_type"),
|
||||
|
||||
@@ -89,6 +89,8 @@ class Staff(SoftDeleteModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "staff"
|
||||
verbose_name = "员工"
|
||||
verbose_name_plural = "员工"
|
||||
indexes = [
|
||||
models.Index(fields=["org_unit"], name="idx_staff_org_unit"),
|
||||
models.Index(fields=["supervisor"], name="idx_staff_supervisor"),
|
||||
@@ -136,3 +138,5 @@ class StaffPersonalInfo(models.Model):
|
||||
|
||||
class Meta:
|
||||
db_table = "staff_personal_info"
|
||||
verbose_name = "员工个人信息"
|
||||
verbose_name_plural = "员工个人信息"
|
||||
|
||||
@@ -24,6 +24,8 @@ class StaffTransferLog(TimeStampedModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "staff_transfer_logs"
|
||||
verbose_name = "人事异动记录"
|
||||
verbose_name_plural = "人事异动记录"
|
||||
indexes = [
|
||||
models.Index(fields=["staff", "-transfer_date"], name="idx_transfer_logs_staff"),
|
||||
models.Index(fields=["transfer_type", "-operated_at"], name="idx_transfer_logs_type"),
|
||||
@@ -54,6 +56,8 @@ class StaffRewardPunish(SoftDeleteModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "staff_reward_punish"
|
||||
verbose_name = "奖惩记录"
|
||||
verbose_name_plural = "奖惩记录"
|
||||
|
||||
|
||||
class StaffAccount(TimeStampedModel):
|
||||
@@ -70,6 +74,8 @@ class StaffAccount(TimeStampedModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "staff_accounts"
|
||||
verbose_name = "员工第三方账号"
|
||||
verbose_name_plural = "员工第三方账号"
|
||||
constraints = [
|
||||
models.UniqueConstraint(
|
||||
fields=["staff", "platform"],
|
||||
@@ -94,6 +100,8 @@ class StaffWorkExperience(TimeStampedModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "staff_work_experiences"
|
||||
verbose_name = "工作经历"
|
||||
verbose_name_plural = "工作经历"
|
||||
|
||||
|
||||
class StaffEducation(TimeStampedModel):
|
||||
@@ -112,6 +120,8 @@ class StaffEducation(TimeStampedModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "staff_educations"
|
||||
verbose_name = "教育经历"
|
||||
verbose_name_plural = "教育经历"
|
||||
|
||||
|
||||
class StaffTraining(TimeStampedModel):
|
||||
@@ -126,6 +136,8 @@ class StaffTraining(TimeStampedModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "staff_trainings"
|
||||
verbose_name = "培训记录"
|
||||
verbose_name_plural = "培训记录"
|
||||
|
||||
|
||||
class StaffFamilyMember(TimeStampedModel):
|
||||
@@ -143,6 +155,8 @@ class StaffFamilyMember(TimeStampedModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "staff_family_members"
|
||||
verbose_name = "家庭成员"
|
||||
verbose_name_plural = "家庭成员"
|
||||
|
||||
|
||||
class StaffRemark(SoftDeleteModel):
|
||||
@@ -162,3 +176,5 @@ class StaffRemark(SoftDeleteModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "staff_remarks"
|
||||
verbose_name = "员工备注"
|
||||
verbose_name_plural = "员工备注"
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
# Generated by Django 4.2.16 on 2026-04-29 11:07
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('fonrey_permission', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='permissionchangelog',
|
||||
options={'ordering': ['-operated_at'], 'verbose_name': '权限变更流水', 'verbose_name_plural': '权限变更流水'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='permissiondef',
|
||||
options={'verbose_name': '权限定义', 'verbose_name_plural': '权限定义'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='role',
|
||||
options={'verbose_name': '角色', 'verbose_name_plural': '角色'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='rolepermission',
|
||||
options={'verbose_name': '角色权限', 'verbose_name_plural': '角色权限'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='staffdatascope',
|
||||
options={'verbose_name': '员工数据范围', 'verbose_name_plural': '员工数据范围'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='staffpermissionoverride',
|
||||
options={'verbose_name': '个人权限覆盖', 'verbose_name_plural': '个人权限覆盖'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='staffrole',
|
||||
options={'verbose_name': '员工角色', 'verbose_name_plural': '员工角色'},
|
||||
),
|
||||
]
|
||||
@@ -29,6 +29,8 @@ class PermissionDef(TimeStampedModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "permission_defs"
|
||||
verbose_name = "权限定义"
|
||||
verbose_name_plural = "权限定义"
|
||||
indexes = [
|
||||
models.Index(
|
||||
fields=["module", "sub_module", "sort_order"],
|
||||
|
||||
@@ -34,6 +34,8 @@ class Role(SoftDeleteModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "roles"
|
||||
verbose_name = "角色"
|
||||
verbose_name_plural = "角色"
|
||||
constraints = [
|
||||
models.UniqueConstraint(
|
||||
fields=["name"],
|
||||
@@ -76,6 +78,8 @@ class RolePermission(TimeStampedModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "role_permissions"
|
||||
verbose_name = "角色权限"
|
||||
verbose_name_plural = "角色权限"
|
||||
constraints = [
|
||||
models.UniqueConstraint(
|
||||
fields=["role", "permission_def"],
|
||||
|
||||
@@ -34,6 +34,8 @@ class StaffRole(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "staff_roles"
|
||||
verbose_name = "员工角色"
|
||||
verbose_name_plural = "员工角色"
|
||||
constraints = [
|
||||
models.UniqueConstraint(
|
||||
fields=["staff", "role"],
|
||||
@@ -83,6 +85,8 @@ class StaffPermissionOverride(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "staff_permission_overrides"
|
||||
verbose_name = "个人权限覆盖"
|
||||
verbose_name_plural = "个人权限覆盖"
|
||||
constraints = [
|
||||
models.UniqueConstraint(
|
||||
fields=["staff", "permission_def"],
|
||||
@@ -126,6 +130,8 @@ class StaffDataScope(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "staff_data_scopes"
|
||||
verbose_name = "员工数据范围"
|
||||
verbose_name_plural = "员工数据范围"
|
||||
indexes = [
|
||||
models.Index(fields=["staff"], name="idx_data_scopes_staff"),
|
||||
models.Index(fields=["org_unit"], name="idx_data_scopes_org"),
|
||||
@@ -173,6 +179,8 @@ class PermissionChangeLog(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "permission_change_logs"
|
||||
verbose_name = "权限变更流水"
|
||||
verbose_name_plural = "权限变更流水"
|
||||
ordering = ["-operated_at"]
|
||||
indexes = [
|
||||
models.Index(
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
# Generated by Django 4.2.16 on 2026-04-29 11:07
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('fonrey_property', '0002_partitions_and_triggers'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='commission',
|
||||
options={'verbose_name': '委托管理', 'verbose_name_plural': '委托管理'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='commissionattachment',
|
||||
options={'verbose_name': '委托附件', 'verbose_name_plural': '委托附件'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='fieldsurvey',
|
||||
options={'verbose_name': '实勘记录', 'verbose_name_plural': '实勘记录'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='followlog',
|
||||
options={'managed': False, 'verbose_name': '房源跟进日志', 'verbose_name_plural': '房源跟进日志'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='followlogattachment',
|
||||
options={'verbose_name': '跟进附件', 'verbose_name_plural': '跟进附件'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='followlogrecording',
|
||||
options={'verbose_name': '跟进录音', 'verbose_name_plural': '跟进录音'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='keyattachment',
|
||||
options={'verbose_name': '钥匙附件', 'verbose_name_plural': '钥匙附件'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='listinghistory',
|
||||
options={'verbose_name': '挂牌历史', 'verbose_name_plural': '挂牌历史'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='numberholderapproval',
|
||||
options={'verbose_name': '号码方审批', 'verbose_name_plural': '号码方审批'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='pricechange',
|
||||
options={'verbose_name': '调价记录', 'verbose_name_plural': '调价记录'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='property',
|
||||
options={'verbose_name': '房源', 'verbose_name_plural': '房源'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='propertyattachment',
|
||||
options={'verbose_name': '房源附件', 'verbose_name_plural': '房源附件'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='propertycertificate',
|
||||
options={'verbose_name': '房源产证', 'verbose_name_plural': '房源产证'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='propertycompleteness',
|
||||
options={'verbose_name': '房源完整度', 'verbose_name_plural': '房源完整度'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='propertycontact',
|
||||
options={'verbose_name': '房源联系人', 'verbose_name_plural': '房源联系人'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='propertyfavorite',
|
||||
options={'verbose_name': '房源收藏', 'verbose_name_plural': '房源收藏'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='propertykey',
|
||||
options={'verbose_name': '房源钥匙', 'verbose_name_plural': '房源钥匙'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='propertymarketing',
|
||||
options={'verbose_name': '房源营销信息', 'verbose_name_plural': '房源营销信息'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='propertyphoto',
|
||||
options={'managed': False, 'verbose_name': '房源图片', 'verbose_name_plural': '房源图片'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='propertyprotection',
|
||||
options={'verbose_name': '房源保护期', 'verbose_name_plural': '房源保护期'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='propertytag',
|
||||
options={'verbose_name': '房源标签', 'verbose_name_plural': '房源标签'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='propertytagrelation',
|
||||
options={'verbose_name': '房源标签关联', 'verbose_name_plural': '房源标签关联'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='surveyphoto',
|
||||
options={'verbose_name': '实勘照片', 'verbose_name_plural': '实勘照片'},
|
||||
),
|
||||
]
|
||||
@@ -172,6 +172,8 @@ class Property(SoftDeleteModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "properties"
|
||||
verbose_name = "房源"
|
||||
verbose_name_plural = "房源"
|
||||
constraints = [
|
||||
models.CheckConstraint(
|
||||
check=models.Q(floor__gt=0) & models.Q(floor__lte=models.F("total_floors")),
|
||||
@@ -246,6 +248,8 @@ class PropertyContact(SoftDeleteModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "property_contacts"
|
||||
verbose_name = "房源联系人"
|
||||
verbose_name_plural = "房源联系人"
|
||||
indexes = [
|
||||
models.Index(fields=["property"], name="idx_pc_property"),
|
||||
models.Index(fields=["phone_hash"], name="idx_pc_phone_hash"),
|
||||
@@ -273,6 +277,8 @@ class PropertyMarketing(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "property_marketing"
|
||||
verbose_name = "房源营销信息"
|
||||
verbose_name_plural = "房源营销信息"
|
||||
|
||||
|
||||
class PropertyCertificate(UUIDPrimaryKeyModel):
|
||||
@@ -297,6 +303,8 @@ class PropertyCertificate(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "property_certificates"
|
||||
verbose_name = "房源产证"
|
||||
verbose_name_plural = "房源产证"
|
||||
|
||||
|
||||
class PropertyCompleteness(UUIDPrimaryKeyModel):
|
||||
@@ -319,6 +327,8 @@ class PropertyCompleteness(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "property_completeness"
|
||||
verbose_name = "房源完整度"
|
||||
verbose_name_plural = "房源完整度"
|
||||
|
||||
|
||||
class PropertyProtection(UUIDPrimaryKeyModel):
|
||||
@@ -336,3 +346,5 @@ class PropertyProtection(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "property_protections"
|
||||
verbose_name = "房源保护期"
|
||||
verbose_name_plural = "房源保护期"
|
||||
|
||||
@@ -44,6 +44,8 @@ class FollowLog(models.Model):
|
||||
|
||||
class Meta:
|
||||
db_table = "follow_logs"
|
||||
verbose_name = "房源跟进日志"
|
||||
verbose_name_plural = "房源跟进日志"
|
||||
managed = False
|
||||
unique_together = (("id", "created_at"),)
|
||||
|
||||
@@ -61,6 +63,8 @@ class FollowLogAttachment(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "follow_log_attachments"
|
||||
verbose_name = "跟进附件"
|
||||
verbose_name_plural = "跟进附件"
|
||||
indexes = [models.Index(fields=["follow_log_id"], name="idx_fla_log")]
|
||||
|
||||
|
||||
@@ -72,6 +76,8 @@ class FollowLogRecording(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "follow_log_recordings"
|
||||
verbose_name = "跟进录音"
|
||||
verbose_name_plural = "跟进录音"
|
||||
indexes = [models.Index(fields=["follow_log_id"], name="idx_flr_log")]
|
||||
|
||||
|
||||
@@ -114,6 +120,8 @@ class PropertyKey(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "property_keys"
|
||||
verbose_name = "房源钥匙"
|
||||
verbose_name_plural = "房源钥匙"
|
||||
indexes = [models.Index(fields=["property"], name="idx_pk_property")]
|
||||
|
||||
|
||||
@@ -127,4 +135,6 @@ class KeyAttachment(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "key_attachments"
|
||||
verbose_name = "钥匙附件"
|
||||
verbose_name_plural = "钥匙附件"
|
||||
indexes = [models.Index(fields=["key"], name="idx_ka_key")]
|
||||
|
||||
@@ -44,6 +44,8 @@ class ListingHistory(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "listing_histories"
|
||||
verbose_name = "挂牌历史"
|
||||
verbose_name_plural = "挂牌历史"
|
||||
indexes = [
|
||||
models.Index(fields=["property"], name="idx_lh_property"),
|
||||
models.Index(fields=["property", "status"], name="idx_lh_active"),
|
||||
@@ -69,6 +71,8 @@ class PriceChange(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "price_changes"
|
||||
verbose_name = "调价记录"
|
||||
verbose_name_plural = "调价记录"
|
||||
indexes = [
|
||||
models.Index(fields=["property"], name="idx_pchg_property"),
|
||||
models.Index(fields=["property", "-changed_at"], name="idx_pchg_time"),
|
||||
@@ -130,6 +134,8 @@ class Commission(TimeStampedModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "commissions"
|
||||
verbose_name = "委托管理"
|
||||
verbose_name_plural = "委托管理"
|
||||
indexes = [
|
||||
models.Index(fields=["property"], name="idx_commissions_property"),
|
||||
models.Index(fields=["property", "status"], name="idx_commissions_active"),
|
||||
@@ -151,6 +157,8 @@ class CommissionAttachment(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "commission_attachments"
|
||||
verbose_name = "委托附件"
|
||||
verbose_name_plural = "委托附件"
|
||||
indexes = [models.Index(fields=["commission"], name="idx_ca_commission")]
|
||||
|
||||
|
||||
@@ -188,6 +196,8 @@ class NumberHolderApproval(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "number_holder_approvals"
|
||||
verbose_name = "号码方审批"
|
||||
verbose_name_plural = "号码方审批"
|
||||
indexes = [
|
||||
models.Index(fields=["status"], name="idx_nha_status"),
|
||||
models.Index(fields=["property"], name="idx_nha_property"),
|
||||
|
||||
@@ -32,6 +32,8 @@ class FieldSurvey(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "field_surveys"
|
||||
verbose_name = "实勘记录"
|
||||
verbose_name_plural = "实勘记录"
|
||||
indexes = [
|
||||
models.Index(fields=["property"], name="idx_fs_property"),
|
||||
models.Index(fields=["property", "status"], name="idx_fs_submitted"),
|
||||
@@ -52,6 +54,8 @@ class SurveyPhoto(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "survey_photos"
|
||||
verbose_name = "实勘照片"
|
||||
verbose_name_plural = "实勘照片"
|
||||
indexes = [
|
||||
models.Index(fields=["survey"], name="idx_sp_survey"),
|
||||
models.Index(fields=["survey", "category"], name="idx_sp_category"),
|
||||
@@ -88,6 +92,8 @@ class PropertyPhoto(models.Model):
|
||||
|
||||
class Meta:
|
||||
db_table = "property_photos"
|
||||
verbose_name = "房源图片"
|
||||
verbose_name_plural = "房源图片"
|
||||
managed = False
|
||||
unique_together = (("id", "created_at"),)
|
||||
|
||||
@@ -113,6 +119,8 @@ class PropertyAttachment(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "property_attachments"
|
||||
verbose_name = "房源附件"
|
||||
verbose_name_plural = "房源附件"
|
||||
indexes = [
|
||||
models.Index(fields=["property"], name="idx_pa_property"),
|
||||
models.Index(fields=["property", "category"], name="idx_pa_category"),
|
||||
@@ -128,6 +136,8 @@ class PropertyTag(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "property_tags"
|
||||
verbose_name = "房源标签"
|
||||
verbose_name_plural = "房源标签"
|
||||
|
||||
|
||||
class PropertyTagRelation(models.Model):
|
||||
@@ -140,6 +150,8 @@ class PropertyTagRelation(models.Model):
|
||||
|
||||
class Meta:
|
||||
db_table = "property_tag_relations"
|
||||
verbose_name = "房源标签关联"
|
||||
verbose_name_plural = "房源标签关联"
|
||||
constraints = [
|
||||
models.UniqueConstraint(fields=["property", "tag"], name="uq_ptr_property_tag"),
|
||||
]
|
||||
@@ -160,6 +172,8 @@ class PropertyFavorite(models.Model):
|
||||
|
||||
class Meta:
|
||||
db_table = "property_favorites"
|
||||
verbose_name = "房源收藏"
|
||||
verbose_name_plural = "房源收藏"
|
||||
constraints = [
|
||||
models.UniqueConstraint(fields=["staff", "property"], name="uq_pfav_staff_property"),
|
||||
]
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
# Generated by Django 4.2.16 on 2026-04-29 11:07
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('region', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='businessarea',
|
||||
options={'ordering': ['district_id', 'sort_order', 'name'], 'verbose_name': '商圈', 'verbose_name_plural': '商圈'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='district',
|
||||
options={'ordering': ['city', 'sort_order', 'name'], 'verbose_name': '城区', 'verbose_name_plural': '城区'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='metroline',
|
||||
options={'ordering': ['city', 'sort_order', 'name'], 'verbose_name': '地铁线路', 'verbose_name_plural': '地铁线路'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='metrostation',
|
||||
options={'ordering': ['metro_line_id', 'sort_order'], 'verbose_name': '地铁站点', 'verbose_name_plural': '地铁站点'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='school',
|
||||
options={'ordering': ['name'], 'verbose_name': '学校', 'verbose_name_plural': '学校'},
|
||||
),
|
||||
]
|
||||
@@ -13,6 +13,8 @@ class District(TimeStampedModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "districts"
|
||||
verbose_name = "城区"
|
||||
verbose_name_plural = "城区"
|
||||
constraints = [
|
||||
models.UniqueConstraint(
|
||||
fields=["city", "name"],
|
||||
@@ -40,6 +42,8 @@ class BusinessArea(TimeStampedModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "business_areas"
|
||||
verbose_name = "商圈"
|
||||
verbose_name_plural = "商圈"
|
||||
constraints = [
|
||||
models.UniqueConstraint(
|
||||
fields=["district", "name"],
|
||||
@@ -68,6 +72,8 @@ class MetroLine(TimeStampedModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "metro_lines"
|
||||
verbose_name = "地铁线路"
|
||||
verbose_name_plural = "地铁线路"
|
||||
ordering = ["city", "sort_order", "name"]
|
||||
|
||||
def __str__(self) -> str:
|
||||
@@ -88,6 +94,8 @@ class MetroStation(TimeStampedModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "metro_stations"
|
||||
verbose_name = "地铁站点"
|
||||
verbose_name_plural = "地铁站点"
|
||||
indexes = [
|
||||
models.Index(
|
||||
fields=["metro_line"],
|
||||
@@ -132,6 +140,8 @@ class School(TimeStampedModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "schools"
|
||||
verbose_name = "学校"
|
||||
verbose_name_plural = "学校"
|
||||
indexes = [
|
||||
models.Index(
|
||||
fields=["district"],
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
# Generated by Django 4.2.16 on 2026-04-29 11:07
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('setting', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='fieldrequirementrule',
|
||||
options={'verbose_name': '字段必填规则', 'verbose_name_plural': '字段必填规则'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='lookupgroup',
|
||||
options={'verbose_name': '查找组', 'verbose_name_plural': '查找组'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='lookupitem',
|
||||
options={'verbose_name': '查找项', 'verbose_name_plural': '查找项'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='tenantsetting',
|
||||
options={'verbose_name': '租户设置', 'verbose_name_plural': '租户设置'},
|
||||
),
|
||||
]
|
||||
@@ -14,6 +14,8 @@ class LookupGroup(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "lookup_groups"
|
||||
verbose_name = "查找组"
|
||||
verbose_name_plural = "查找组"
|
||||
constraints = [
|
||||
models.UniqueConstraint(
|
||||
fields=["module", "key"], name="uq_lookup_groups_module_key"
|
||||
@@ -42,6 +44,8 @@ class LookupItem(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "lookup_items"
|
||||
verbose_name = "查找项"
|
||||
verbose_name_plural = "查找项"
|
||||
constraints = [
|
||||
models.UniqueConstraint(
|
||||
fields=["group", "value"], name="uq_lookup_items_group_value"
|
||||
|
||||
@@ -32,6 +32,8 @@ class TenantSetting(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "tenant_settings"
|
||||
verbose_name = "租户设置"
|
||||
verbose_name_plural = "租户设置"
|
||||
constraints = [
|
||||
models.UniqueConstraint(
|
||||
fields=["category", "key"], name="uq_tenant_settings_cat_key"
|
||||
@@ -61,6 +63,8 @@ class FieldRequirementRule(UUIDPrimaryKeyModel):
|
||||
|
||||
class Meta:
|
||||
db_table = "field_requirement_rules"
|
||||
verbose_name = "字段必填规则"
|
||||
verbose_name_plural = "字段必填规则"
|
||||
constraints = [
|
||||
models.UniqueConstraint(
|
||||
fields=["module", "entity_type", "trade_status", "field_key"],
|
||||
|
||||
40
apps/tenant/migrations/0001_initial.py
Normal file
40
apps/tenant/migrations/0001_initial.py
Normal file
@@ -0,0 +1,40 @@
|
||||
# Generated by Django 4.2.16 on 2026-04-29 11:07
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django_tenants.postgresql_backend.base
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Tenant',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('schema_name', models.CharField(db_index=True, max_length=63, unique=True, validators=[django_tenants.postgresql_backend.base._check_schema_name])),
|
||||
('name', models.CharField(max_length=255)),
|
||||
('created_on', models.DateField(auto_now_add=True)),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Domain',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('domain', models.CharField(db_index=True, max_length=253, unique=True)),
|
||||
('is_primary', models.BooleanField(db_index=True, default=True)),
|
||||
('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='domains', to='tenant.tenant')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
]
|
||||
Reference in New Issue
Block a user