123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- # Generated by Django 4.1.2 on 2025-08-07 22:15
- from django.conf import settings
- from django.db import migrations, models
- import django.db.models.deletion
- class Migration(migrations.Migration):
- initial = True
- dependencies = [
- migrations.swappable_dependency(settings.AUTH_USER_MODEL),
- ]
- operations = [
- migrations.CreateModel(
- name='Users',
- fields=[
- ('user_id', models.AutoField(primary_key=True, serialize=False, verbose_name='用户ID')),
- ('name', models.CharField(max_length=80, verbose_name='姓名')),
- ('openid', models.CharField(max_length=100, unique=True, verbose_name='OPENID')),
- ('appid', models.CharField(max_length=100, verbose_name='APPID')),
- ('roles', models.CharField(choices=[('ADM', '管理员'), ('USR', '普通用户'), ('DEV', '开发者')], default='USR', max_length=10, verbose_name='角色')),
- ('vip', models.PositiveIntegerField(default=1, verbose_name='VIP等级')),
- ('vip_time', models.DateTimeField(auto_now_add=True, verbose_name='VIP生效时间')),
- ('is_delete', models.BooleanField(default=False, verbose_name='删除标记')),
- ('developer', models.BooleanField(default=False, verbose_name='开发者标记')),
- ('t_code', models.CharField(max_length=100, unique=True, verbose_name='交易验证码')),
- ('ip', models.GenericIPAddressField(verbose_name='注册IP')),
- ('avatar', models.ImageField(blank=True, default='/static/img/user.jpg', null=True, upload_to='avatars/', verbose_name='头像')),
- ('email', models.EmailField(blank=True, default='email@email.com', max_length=254, null=True, verbose_name='邮箱')),
- ('phone', models.CharField(blank=True, max_length=20, null=True, verbose_name='手机号')),
- ('address', models.CharField(blank=True, max_length=200, null=True, verbose_name='地址')),
- ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
- ('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
- ('user_name', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='user_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
- ],
- options={
- 'verbose_name': '用户档案',
- 'verbose_name_plural': '用户档案',
- 'db_table': 'user_profile',
- 'ordering': ['-create_time'],
- },
- ),
- migrations.CreateModel(
- name='AcademicProfile',
- fields=[
- ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, related_name='user_academic_profile', serialize=False, to='userprofile.users', verbose_name='关联用户')),
- ('role', models.CharField(choices=[('UG', '本科生'), ('MS', '硕士生'), ('PhD', '博士生'), ('PD', '博士后'), ('FAC', '教职工'), ('RES', '研究员')], default='MS', max_length=10, verbose_name='学术身份')),
- ('enrollment_year', models.PositiveIntegerField(help_text='格式:YYYY(如2023)', verbose_name='入学年份')),
- ('graduation_year', models.PositiveIntegerField(blank=True, null=True, verbose_name='预计毕业年份')),
- ('department', models.CharField(max_length=100, verbose_name='院系/研究所')),
- ('major', models.CharField(max_length=100, verbose_name='专业方向')),
- ('research_tags', models.CharField(blank=True, help_text='用逗号分隔多个方向(如:人工智能,教育技术)', max_length=255, verbose_name='研究方向')),
- ('skill_tags', models.CharField(blank=True, help_text='用逗号分隔多个技能(如:Python,数据分析)', max_length=255, verbose_name='技能标签')),
- ],
- options={
- 'verbose_name': '学术档案',
- 'verbose_name_plural': '学术档案',
- 'db_table': 'user_academic_profile',
- },
- ),
- migrations.CreateModel(
- name='ResearchGroup',
- fields=[
- ('group_id', models.AutoField(primary_key=True, serialize=False, verbose_name='小组ID')),
- ('name', models.CharField(max_length=100, unique=True, verbose_name='小组名称')),
- ('description', models.TextField(blank=True, verbose_name='小组描述')),
- ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
- ('is_active', models.BooleanField(default=True, verbose_name='是否活跃')),
- ('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='created_groups', to='userprofile.users', verbose_name='创建人')),
- ],
- options={
- 'verbose_name': '教研小组',
- 'verbose_name_plural': '教研小组',
- 'db_table': 'user_research_group',
- 'ordering': ['-created_at'],
- },
- ),
- migrations.CreateModel(
- name='GroupMembership',
- fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('role', models.CharField(choices=[('LEAD', '组长'), ('DEP', '副组长'), ('CORE', '核心成员'), ('MEM', '普通成员'), ('ADV', '指导老师'), ('OBS', '观察员')], default='MEM', max_length=20, verbose_name='小组角色')),
- ('status', models.CharField(choices=[('ACT', '活跃'), ('LV', '请假'), ('INAC', '不活跃'), ('GRAD', '已毕业'), ('TRF', '已转组')], default='ACT', max_length=10, verbose_name='在组状态')),
- ('joined_at', models.DateTimeField(auto_now_add=True, verbose_name='加入时间')),
- ('left_at', models.DateTimeField(blank=True, null=True, verbose_name='离开时间')),
- ('custom_permissions', models.JSONField(blank=True, default=dict, help_text='JSON格式存储额外权限', null=True, verbose_name='特殊权限')),
- ('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='members', to='userprofile.researchgroup', verbose_name='所属小组')),
- ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='group_memberships', to='userprofile.users', verbose_name='成员')),
- ],
- options={
- 'verbose_name': '小组成员',
- 'verbose_name_plural': '小组成员',
- 'db_table': 'user_group_membership',
- 'ordering': ['-joined_at'],
- 'unique_together': {('user', 'group')},
- },
- ),
- ]
|