diff --git a/ce_server/apps/expert/__init__.py b/ce_server/apps/expert/__init__.py new file mode 100644 index 0000000..582ad1f --- /dev/null +++ b/ce_server/apps/expert/__init__.py @@ -0,0 +1 @@ +default_app_config = 'apps.expert.apps.ExpertConfig' \ No newline at end of file diff --git a/ce_server/apps/expert/admin.py b/ce_server/apps/expert/admin.py new file mode 100644 index 0000000..d185d18 --- /dev/null +++ b/ce_server/apps/expert/admin.py @@ -0,0 +1,24 @@ +from django.contrib import admin +from django.contrib.admin.decorators import register +from .models import BaseInfo, WorkExperience, Paper, Project, Award +# Register your models here. + +@admin.register(BaseInfo) +class BaseInfoAdmin(admin.ModelAdmin): + pass + +@admin.register(WorkExperience) +class WorkExperienceAdmin(admin.ModelAdmin): + pass + +@admin.register(Paper) +class PaperAdmin(admin.ModelAdmin): + pass + +@admin.register(Project) +class ProjectAdmin(admin.ModelAdmin): + pass + +@admin.register(Award) +class AwardAdmin(admin.ModelAdmin): + pass \ No newline at end of file diff --git a/ce_server/apps/expert/apps.py b/ce_server/apps/expert/apps.py new file mode 100644 index 0000000..9b9114d --- /dev/null +++ b/ce_server/apps/expert/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ExpertConfig(AppConfig): + name = 'apps.expert' + verbose_name = '专家库' diff --git a/ce_server/apps/expert/migrations/0001_initial.py b/ce_server/apps/expert/migrations/0001_initial.py new file mode 100644 index 0000000..e40be0e --- /dev/null +++ b/ce_server/apps/expert/migrations/0001_initial.py @@ -0,0 +1,37 @@ +# Generated by Django 3.1.8 on 2021-06-02 06:59 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('system', '0002_auto_20210602_1459'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='BaseInfo', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('name', models.CharField(max_length=100, verbose_name='姓名')), + ('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='baseinfo_belong_dept', to='system.organization', verbose_name='所属部门')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='baseinfo_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='baseinfo_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ('user', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='关联账户')), + ], + options={ + 'verbose_name': '专家基本信息', + 'verbose_name_plural': '专家基本信息', + }, + ), + ] diff --git a/ce_server/apps/expert/migrations/__init__.py b/ce_server/apps/expert/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ce_server/apps/expert/models.py b/ce_server/apps/expert/models.py new file mode 100644 index 0000000..a3b10f3 --- /dev/null +++ b/ce_server/apps/expert/models.py @@ -0,0 +1,66 @@ +from django.db import models +from utils.model import SoftModel, BaseModel +from apps.system.models import CommonAModel, CommonBModel, User +# Create your models here. + +class BaseInfo(CommonBModel): + + gender_choices = ( + ('男', '男'), + ('女', '女'), + ) + + user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, blank=True, verbose_name="关联账户") + name = models.CharField(verbose_name="姓名", max_length=100) + gender = models.CharField(verbose_name="性别",choices=gender_choices, default='男', max_length=10) + idnumber = models.CharField(verbose_name="身份证号", max_length=40) + paddress = models.TextField(verbose_name="通讯地址") + photo = models.CharField(verbose_name="证件照", max_length=100, null=True, blank=True) + + class Meta: + verbose_name = '专家基本信息' + verbose_name_plural = verbose_name + + def __str__(self): + return self.name + +class WorkExperience(CommonAModel): + + name = models.CharField(verbose_name="单位名", max_length=100) + class Meta: + verbose_name = '专家工作经历' + verbose_name_plural = verbose_name + + def __str__(self): + return self.name + +class Project(CommonAModel): + + name = models.CharField(verbose_name="名称", max_length=100) + class Meta: + verbose_name = '专家项目' + verbose_name_plural = verbose_name + + def __str__(self): + return self.name + +class Paper(CommonAModel): + + name = models.CharField(verbose_name="名称", max_length=100) + class Meta: + verbose_name = '专家论文/著作' + verbose_name_plural = verbose_name + + def __str__(self): + return self.name + + +class Award(CommonAModel): + + name = models.CharField(verbose_name="名称", max_length=100) + class Meta: + verbose_name = '专家获奖/荣誉' + verbose_name_plural = verbose_name + + def __str__(self): + return self.name \ No newline at end of file diff --git a/ce_server/apps/expert/tests.py b/ce_server/apps/expert/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/ce_server/apps/expert/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/ce_server/apps/expert/views.py b/ce_server/apps/expert/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/ce_server/apps/expert/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/ce_server/apps/system/admin.py b/ce_server/apps/system/admin.py index e47b0d7..9616a03 100644 --- a/ce_server/apps/system/admin.py +++ b/ce_server/apps/system/admin.py @@ -2,6 +2,12 @@ from django.contrib import admin from simple_history.admin import SimpleHistoryAdmin from .models import User, Organization, Role, Permission, DictType, Dict, File # Register your models here. + +admin.site.site_header = '专家库管理系统' +admin.site.site_title = '专家库' +admin.site.index_title = '后台管理' + + admin.site.register(User) admin.site.register(Organization) admin.site.register(Role) diff --git a/ce_server/apps/system/migrations/0002_auto_20210602_1459.py b/ce_server/apps/system/migrations/0002_auto_20210602_1459.py new file mode 100644 index 0000000..84e0715 --- /dev/null +++ b/ce_server/apps/system/migrations/0002_auto_20210602_1459.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.8 on 2021-06-02 06:59 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('system', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='user', + name='first_name', + field=models.CharField(blank=True, max_length=150, verbose_name='first name'), + ), + ] diff --git a/ce_server/requirements.txt b/ce_server/requirements.txt index 372fda6..e85e4ce 100644 Binary files a/ce_server/requirements.txt and b/ce_server/requirements.txt differ diff --git a/ce_server/server/settings.py b/ce_server/server/settings.py index 54dc7cd..d4b0b80 100644 --- a/ce_server/server/settings.py +++ b/ce_server/server/settings.py @@ -38,6 +38,7 @@ INSTALLED_APPS = [ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'django.contrib.admindocs', 'corsheaders', 'django_celery_beat', 'drf_yasg', @@ -45,7 +46,8 @@ INSTALLED_APPS = [ "django_filters", 'simple_history', 'apps.system', - 'apps.monitor' + 'apps.monitor', + 'apps.expert' ] MIDDLEWARE = [ diff --git a/ce_server/server/urls.py b/ce_server/server/urls.py index 0b7592c..5900ebb 100644 --- a/ce_server/server/urls.py +++ b/ce_server/server/urls.py @@ -40,6 +40,7 @@ schema_view = get_schema_view( ) urlpatterns = [ + path('admin/doc/', include('django.contrib.admindocs.urls')), path('admin/', admin.site.urls), path('token/', TokenObtainPairView.as_view(), name='token_obtain_pair'), path('token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),