0001_initial.py 6.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. # Generated by Django 4.1.2 on 2025-08-05 14:01
  2. from django.db import migrations, models
  3. import django.db.models.deletion
  4. class Migration(migrations.Migration):
  5. initial = True
  6. dependencies = [
  7. ]
  8. operations = [
  9. migrations.CreateModel(
  10. name='Users',
  11. fields=[
  12. ('user_id', models.AutoField(primary_key=True, serialize=False, verbose_name='用户ID')),
  13. ('name', models.CharField(max_length=80, verbose_name='姓名')),
  14. ('openid', models.CharField(max_length=100, unique=True, verbose_name='OPENID')),
  15. ('appid', models.CharField(max_length=100, verbose_name='APPID')),
  16. ('vip', models.PositiveIntegerField(default=1, verbose_name='VIP等级')),
  17. ('vip_time', models.DateTimeField(auto_now_add=True, verbose_name='VIP生效时间')),
  18. ('is_delete', models.BooleanField(default=False, verbose_name='删除标记')),
  19. ('developer', models.BooleanField(default=False, verbose_name='开发者标记')),
  20. ('t_code', models.CharField(max_length=100, unique=True, verbose_name='交易验证码')),
  21. ('ip', models.GenericIPAddressField(verbose_name='注册IP')),
  22. ('avatar', models.CharField(default='/static/img/user.jpg', max_length=200, verbose_name='用户头像')),
  23. ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
  24. ('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
  25. ],
  26. options={
  27. 'verbose_name': '用户档案',
  28. 'verbose_name_plural': '用户档案',
  29. 'db_table': 'user_profile',
  30. 'ordering': ['-create_time'],
  31. },
  32. ),
  33. migrations.CreateModel(
  34. name='AcademicProfile',
  35. fields=[
  36. ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, related_name='academic_profile', serialize=False, to='userprofile.users', verbose_name='关联用户')),
  37. ('role', models.CharField(choices=[('UG', '本科生'), ('MS', '硕士生'), ('PhD', '博士生'), ('PD', '博士后'), ('FAC', '教职工'), ('RES', '研究员')], default='MS', max_length=10, verbose_name='学术身份')),
  38. ('enrollment_year', models.PositiveIntegerField(help_text='格式:YYYY(如2023)', verbose_name='入学年份')),
  39. ('graduation_year', models.PositiveIntegerField(blank=True, null=True, verbose_name='预计毕业年份')),
  40. ('department', models.CharField(max_length=100, verbose_name='院系/研究所')),
  41. ('major', models.CharField(max_length=100, verbose_name='专业方向')),
  42. ('research_tags', models.CharField(blank=True, help_text='用逗号分隔多个方向(如:人工智能,教育技术)', max_length=255, verbose_name='研究方向')),
  43. ('skill_tags', models.CharField(blank=True, help_text='用逗号分隔多个技能(如:Python,数据分析)', max_length=255, verbose_name='技能标签')),
  44. ],
  45. options={
  46. 'verbose_name': '学术档案',
  47. 'verbose_name_plural': '学术档案',
  48. 'db_table': 'academic_profile',
  49. },
  50. ),
  51. migrations.CreateModel(
  52. name='ResearchGroup',
  53. fields=[
  54. ('group_id', models.AutoField(primary_key=True, serialize=False, verbose_name='小组ID')),
  55. ('name', models.CharField(max_length=100, unique=True, verbose_name='小组名称')),
  56. ('description', models.TextField(blank=True, verbose_name='小组描述')),
  57. ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
  58. ('is_active', models.BooleanField(default=True, verbose_name='是否活跃')),
  59. ('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='created_groups', to='userprofile.users', verbose_name='创建人')),
  60. ],
  61. options={
  62. 'verbose_name': '教研小组',
  63. 'verbose_name_plural': '教研小组',
  64. 'db_table': 'research_group',
  65. 'ordering': ['-created_at'],
  66. },
  67. ),
  68. migrations.CreateModel(
  69. name='GroupMembership',
  70. fields=[
  71. ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
  72. ('role', models.CharField(choices=[('LEAD', '组长'), ('DEP', '副组长'), ('CORE', '核心成员'), ('MEM', '普通成员'), ('ADV', '指导老师'), ('OBS', '观察员')], default='MEM', max_length=20, verbose_name='小组角色')),
  73. ('status', models.CharField(choices=[('ACT', '活跃'), ('LV', '请假'), ('INAC', '不活跃'), ('GRAD', '已毕业'), ('TRF', '已转组')], default='ACT', max_length=10, verbose_name='在组状态')),
  74. ('joined_at', models.DateTimeField(auto_now_add=True, verbose_name='加入时间')),
  75. ('left_at', models.DateTimeField(blank=True, null=True, verbose_name='离开时间')),
  76. ('custom_permissions', models.JSONField(blank=True, default=dict, help_text='JSON格式存储额外权限', null=True, verbose_name='特殊权限')),
  77. ('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='members', to='userprofile.researchgroup', verbose_name='所属小组')),
  78. ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='group_memberships', to='userprofile.users', verbose_name='成员')),
  79. ],
  80. options={
  81. 'verbose_name': '小组成员',
  82. 'verbose_name_plural': '小组成员',
  83. 'db_table': 'group_membership',
  84. 'ordering': ['-joined_at'],
  85. 'unique_together': {('user', 'group')},
  86. },
  87. ),
  88. ]