迁移文件上传

This commit is contained in:
晓丰 2025-05-24 13:58:24 +08:00
parent 13215fb6ad
commit 458940df2d
9 changed files with 329 additions and 0 deletions

View File

@ -0,0 +1,51 @@
# Generated by Django 5.2 on 2025-05-24 05:54
import django.contrib.auth.models
import django.contrib.auth.validators
import django.db.models.deletion
import django.utils.timezone
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
('auth', '0012_alter_user_first_name_max_length'),
('websites', '__first__'),
]
operations = [
migrations.CreateModel(
name='User',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('password', models.CharField(max_length=128, verbose_name='password')),
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')),
('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')),
('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')),
('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')),
('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
('role', models.CharField(choices=[('admin', '管理员'), ('manager', '分管理'), ('user', '普通用户')], default='user', help_text='用户角色', max_length=20)),
('authorized_websites', models.ManyToManyField(blank=True, help_text='普通用户被授权可访问的网站', related_name='authorized_users', to='websites.website')),
('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups')),
('managed_websites', models.ManyToManyField(blank=True, help_text='分管理可管理的网站', related_name='managers', to='websites.website')),
('source_manager', models.ForeignKey(blank=True, limit_choices_to={'role': 'manager'}, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='brought_users', to=settings.AUTH_USER_MODEL, verbose_name='所属分管理')),
('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions')),
],
options={
'verbose_name': 'user',
'verbose_name_plural': 'users',
'abstract': False,
},
managers=[
('objects', django.contrib.auth.models.UserManager()),
],
),
]

View File

@ -0,0 +1,51 @@
# Generated by Django 5.2 on 2025-05-24 05:55
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
('resumes', '0001_initial'),
('websites', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='WebsiteAccessRequest',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('updated_at', models.DateTimeField(auto_now=True)),
('status', models.CharField(choices=[('pending', '待审批'), ('approved', '已通过'), ('rejected', '已拒绝')], default='pending', max_length=20)),
('reason', models.TextField(blank=True)),
('created_at', models.DateTimeField(auto_now_add=True)),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
('website', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='websites.website')),
],
options={
'verbose_name': '网站访问申请',
'verbose_name_plural': '网站访问申请',
},
),
migrations.CreateModel(
name='ResumeDetailAccessRequest',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('reason', models.TextField(blank=True, verbose_name='申请理由')),
('status', models.CharField(choices=[('pending', '待审批'), ('approved', '已通过'), ('rejected', '已拒绝')], default='pending', max_length=20, verbose_name='审批状态')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='申请时间')),
('resume', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='resumes.resumedetail', verbose_name='目标简历')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='申请用户')),
],
options={
'verbose_name': '简历详情访问申请',
'verbose_name_plural': '简历详情访问申请',
'unique_together': {('user', 'resume')},
},
),
]

View File

View File

@ -0,0 +1,33 @@
# Generated by Django 5.2 on 2025-05-24 05:55
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
('websites', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='Company',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=200, verbose_name='企业名称')),
('category', models.CharField(max_length=100, verbose_name='公司类别')),
('size', models.CharField(max_length=50, verbose_name='公司规模')),
('introduction', models.TextField(verbose_name='企业介绍')),
('address', models.CharField(max_length=300, verbose_name='企业地址')),
('benefits', models.TextField(blank=True, verbose_name='企业福利')),
('website', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='companies', to='websites.website', verbose_name='隶属网站')),
],
options={
'verbose_name': '企业',
'verbose_name_plural': '企业列表',
},
),
]

View File

@ -0,0 +1,33 @@
# Generated by Django 5.2 on 2025-05-24 05:55
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='RegistrationCode',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('code', models.CharField(max_length=32, unique=True, verbose_name='注册码')),
('description', models.CharField(blank=True, max_length=100, verbose_name='说明')),
('usage_limit', models.IntegerField(default=1, verbose_name='最多使用次数')),
('used_count', models.IntegerField(default=0, verbose_name='已使用次数')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
('manager', models.ForeignKey(limit_choices_to={'role': 'manager'}, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='对应分管理')),
],
options={
'verbose_name': '注册码申请',
'verbose_name_plural': '注册码申请',
},
),
]

View File

@ -0,0 +1,50 @@
# Generated by Django 5.2 on 2025-05-24 05:55
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
('companies', '0001_initial'),
('websites', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='Position',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=200, verbose_name='职位名称')),
('nature', models.CharField(max_length=50, verbose_name='职位性质')),
('category', models.CharField(max_length=100, verbose_name='职位类别')),
('region', models.CharField(max_length=100, verbose_name='职位区域')),
('experience', models.CharField(max_length=100, verbose_name='工作经历要求')),
('education', models.CharField(max_length=100, verbose_name='学历要求')),
('salary', models.CharField(max_length=100, verbose_name='职位薪资')),
('company', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='positions', to='companies.company', verbose_name='所属企业')),
('website', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='positions', to='websites.website', verbose_name='所属网站')),
],
options={
'verbose_name': '职位',
'verbose_name_plural': '职位列表',
},
),
migrations.CreateModel(
name='PositionDetail',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('description', models.TextField(verbose_name='职位描述(详情)')),
('contact_name', models.CharField(max_length=100, verbose_name='联系人姓名')),
('contact_info', models.CharField(max_length=200, verbose_name='联系方式')),
('position', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='detail', to='positions.position', verbose_name='所属职位')),
],
options={
'verbose_name': '职位详情',
'verbose_name_plural': '职位详情列表',
},
),
]

View File

@ -0,0 +1,84 @@
# Generated by Django 5.2 on 2025-05-24 05:55
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
('websites', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='ResumeBasic',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('resume_id', models.IntegerField(db_index=True, help_text='resume_id', verbose_name='简历ID')),
('name', models.CharField(blank=True, help_text='姓名', max_length=255, null=True, verbose_name='姓名')),
('job_region', models.CharField(blank=True, help_text='求职区域', max_length=255, null=True, verbose_name='求职区域')),
('birthday', models.CharField(blank=True, help_text='生日', max_length=255, null=True, verbose_name='生日')),
('education', models.CharField(blank=True, help_text='学历', max_length=255, null=True, verbose_name='学历')),
('school', models.CharField(blank=True, help_text='学校', max_length=255, null=True, verbose_name='学校')),
('expected_position', models.CharField(blank=True, help_text='期望职务', max_length=255, null=True, verbose_name='期望职务')),
('last_active_time', models.CharField(blank=True, help_text='最后活跃时间', max_length=255, null=True, verbose_name='最后活跃时间')),
('marital_status', models.CharField(blank=True, help_text='婚姻', max_length=255, null=True, verbose_name='婚姻')),
('current_location', models.CharField(blank=True, help_text='现居地', max_length=255, null=True, verbose_name='现居地')),
('age', models.IntegerField(blank=True, help_text='年龄', null=True, verbose_name='年龄')),
('phone', models.CharField(blank=True, help_text='电话', max_length=255, null=True, verbose_name='电话')),
('gender', models.CharField(blank=True, help_text='性别', max_length=255, null=True, verbose_name='性别')),
('job_type', models.CharField(blank=True, help_text='求职类型', max_length=255, null=True, verbose_name='求职类型')),
('job_status', models.CharField(blank=True, help_text='求职状态', max_length=255, null=True, verbose_name='求职状态')),
('work_1_experience', models.TextField(blank=True, help_text='工作1经历', null=True, verbose_name='工作1经历')),
('work_1_time', models.CharField(blank=True, help_text='工作1时间', max_length=255, null=True, verbose_name='工作1时间')),
('work_1_description', models.TextField(blank=True, help_text='工作1内容', null=True, verbose_name='工作1内容')),
('work_2_experience', models.TextField(blank=True, help_text='工作2经历', null=True, verbose_name='工作2经历')),
('work_2_time', models.CharField(blank=True, help_text='工作2时间', max_length=255, null=True, verbose_name='工作2时间')),
('work_2_description', models.TextField(blank=True, help_text='工作2内容', null=True, verbose_name='工作2内容')),
('work_3_experience', models.TextField(blank=True, help_text='工作3经历', null=True, verbose_name='工作3经历')),
('work_3_time', models.CharField(blank=True, help_text='工作3时间', max_length=255, null=True, verbose_name='工作3时间')),
('work_3_description', models.TextField(blank=True, help_text='工作3内容', null=True, verbose_name='工作3内容')),
('work_4_experience', models.TextField(blank=True, help_text='工作4经历', null=True, verbose_name='工作4经历')),
('work_4_time', models.CharField(blank=True, help_text='工作4时间', max_length=255, null=True, verbose_name='工作4时间')),
('work_4_description', models.TextField(blank=True, help_text='工作4内容', null=True, verbose_name='工作4内容')),
('height', models.IntegerField(blank=True, help_text='身高', null=True, verbose_name='身高')),
('weight', models.IntegerField(blank=True, help_text='体重', null=True, verbose_name='体重')),
('work_years', models.CharField(blank=True, help_text='工作经验', max_length=255, null=True, verbose_name='工作经验')),
('highest_education', models.CharField(blank=True, help_text='最高学历', max_length=255, null=True, verbose_name='最高学历')),
('ethnicity', models.CharField(blank=True, help_text='民族', max_length=255, null=True, verbose_name='民族')),
('update_time', models.DateTimeField(blank=True, help_text='更新时间', null=True, verbose_name='更新时间')),
('job_function', models.CharField(blank=True, help_text='工作职能', max_length=255, null=True, verbose_name='工作职能')),
('intended_position', models.CharField(blank=True, help_text='意向岗位', max_length=255, null=True, verbose_name='意向岗位')),
('industry', models.CharField(blank=True, help_text='从事行业', max_length=255, null=True, verbose_name='从事行业')),
('expected_salary', models.CharField(blank=True, help_text='期望薪资', max_length=255, null=True, verbose_name='期望薪资')),
('available_time', models.CharField(blank=True, help_text='到岗时间', max_length=255, null=True, verbose_name='到岗时间')),
('job_property', models.CharField(blank=True, help_text='工作性质', max_length=255, null=True, verbose_name='工作性质')),
('job_location', models.CharField(blank=True, help_text='工作地点', max_length=255, null=True, verbose_name='工作地点')),
('crawl_keywords', models.CharField(blank=True, help_text='关键字', max_length=255, null=True, verbose_name='关键字')),
('source', models.ForeignKey(blank=True, help_text='数据来源网站', null=True, on_delete=django.db.models.deletion.SET_NULL, to='websites.website', verbose_name='数据来源')),
],
options={
'verbose_name': '简历',
'verbose_name_plural': '简历列表',
'unique_together': {('source', 'resume_id')},
},
),
migrations.CreateModel(
name='ResumeDetail',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('unlinked_resume_id', models.IntegerField(blank=True, null=True, verbose_name='无法关联的简历ID')),
('phone', models.CharField(blank=True, max_length=20, verbose_name='联系方式')),
('email', models.EmailField(blank=True, max_length=254, verbose_name='邮箱')),
('updated_at', models.DateTimeField(auto_now=True)),
('resume', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='detail', to='resumes.resumebasic', verbose_name='简历')),
],
options={
'verbose_name': '简历详情',
'verbose_name_plural': '简历详情',
},
),
]

View File

@ -0,0 +1,27 @@
# Generated by Django 5.2 on 2025-05-24 05:55
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Website',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100, verbose_name='网站名称')),
('db_alias', models.CharField(max_length=50, unique=True, verbose_name='数据库别名')),
('description', models.TextField(blank=True, verbose_name='描述')),
],
options={
'verbose_name': '网站',
'verbose_name_plural': '网站列表',
},
),
]