diff --git a/apps/hrm/migrations/0004_alter_employee_user.py b/apps/hrm/migrations/0004_alter_employee_user.py new file mode 100644 index 00000000..db6b9e9d --- /dev/null +++ b/apps/hrm/migrations/0004_alter_employee_user.py @@ -0,0 +1,21 @@ +# Generated by Django 3.2.12 on 2022-09-09 08:14 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('hrm', '0003_alter_employee_type'), + ] + + operations = [ + migrations.AlterField( + model_name='employee', + name='user', + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='employee', to=settings.AUTH_USER_MODEL, verbose_name='系统账号'), + ), + ] diff --git a/apps/hrm/models.py b/apps/hrm/models.py index bfe7b92a..3a3cec31 100755 --- a/apps/hrm/models.py +++ b/apps/hrm/models.py @@ -1,7 +1,7 @@ from django.db import models from apps.system.models import Post, User -from apps.utils.models import BaseModel, CommonAModel, CommonBModel +from apps.utils.models import BaseModel, CommonADModel, CommonAModel, CommonBModel class Employee(CommonBModel): @@ -24,7 +24,7 @@ class Employee(CommonBModel): user = models.OneToOneField(User, verbose_name='系统账号', related_name='employee', - on_delete=models.PROTECT, null=True, blank=True) + on_delete=models.CASCADE, null=True, blank=True) name = models.CharField('姓名', max_length=20) phone = models.CharField('手机号', max_length=11, null=True, blank=True, unique=True) email = models.EmailField('邮箱号', null=True, blank=True) @@ -62,7 +62,7 @@ class Employee(CommonBModel): # CARD_LOCATION = 20 -class NotWorkRemark(CommonAModel): +class NotWorkRemark(CommonADModel): """ 离岗说明 """ diff --git a/apps/utils/mixins.py b/apps/utils/mixins.py index 2b2661f6..703f2095 100755 --- a/apps/utils/mixins.py +++ b/apps/utils/mixins.py @@ -66,12 +66,6 @@ class CustomUpdateModelMixin(UpdateModelMixin): serializer.save(update_by=self.request.user) -class CustomDestoryModelMixin(DestroyModelMixin): - - def perform_destroy(self, instance): - instance.delete(update_by=self.request.user) - - class MyLoggingMixin(object): """Mixin to log requests""" diff --git a/apps/utils/models.py b/apps/utils/models.py index 073cc0ed..01830a3e 100755 --- a/apps/utils/models.py +++ b/apps/utils/models.py @@ -12,13 +12,13 @@ class SoftDeletableQuerySetMixin(object): its ``is_deleted`` field to True. ''' - def delete(self, soft=True, update_by=None): + def delete(self, soft=True): ''' Soft delete objects from queryset (set their ``is_deleted`` field to True) ''' if soft: - self.update(is_deleted=True, update_by=update_by) + self.update(is_deleted=True) else: return super(SoftDeletableQuerySetMixin, self).delete() @@ -103,6 +103,9 @@ class CommonAModel(SoftModel): update_by = models.ForeignKey( 'system.user', null=True, blank=True, on_delete=models.SET_NULL, verbose_name='最后编辑人', related_name='%(class)s_update_by') + # delete_by = models.ForeignKey( + # 'system.user', null=True, blank=True, on_delete=models.SET_NULL, + # verbose_name='删除人', related_name='%(class)s_delete_by') class Meta: abstract = True @@ -118,6 +121,9 @@ class CommonBModel(SoftModel): update_by = models.ForeignKey( 'system.user', null=True, blank=True, on_delete=models.SET_NULL, verbose_name='最后编辑人', related_name='%(class)s_update_by') + # delete_by = models.ForeignKey( + # 'system.user', null=True, blank=True, on_delete=models.SET_NULL, + # verbose_name='删除人', related_name='%(class)s_delete_by') belong_dept = models.ForeignKey( 'system.dept', null=True, blank=True, on_delete=models.SET_NULL, verbose_name='所属部门', related_name='%(class)s_belong_dept') @@ -136,6 +142,9 @@ class CommonADModel(BaseModel): update_by = models.ForeignKey( 'system.user', null=True, blank=True, on_delete=models.SET_NULL, verbose_name='最后编辑人', related_name='%(class)s_update_by') + # delete_by = models.ForeignKey( + # 'system.user', null=True, blank=True, on_delete=models.SET_NULL, + # verbose_name='删除人', related_name='%(class)s_delete_by') class Meta: abstract = True @@ -151,6 +160,9 @@ class CommonBDModel(BaseModel): update_by = models.ForeignKey( 'system.user', null=True, blank=True, on_delete=models.SET_NULL, verbose_name='最后编辑人', related_name='%(class)s_update_by') + # delete_by = models.ForeignKey( + # 'system.user', null=True, blank=True, on_delete=models.SET_NULL, + # verbose_name='删除人', related_name='%(class)s_delete_by') belong_dept = models.ForeignKey( 'system.dept', null=True, blank=True, on_delete=models.SET_NULL, verbose_name='所属部门', related_name='%(class)s_belong_dept') diff --git a/apps/utils/viewsets.py b/apps/utils/viewsets.py index 6c83261d..11613300 100755 --- a/apps/utils/viewsets.py +++ b/apps/utils/viewsets.py @@ -8,7 +8,7 @@ from rest_framework.permissions import IsAuthenticated, IsAdminUser from rest_framework.response import Response from rest_framework.viewsets import GenericViewSet -from apps.system.models import DataFilter, Dept +from apps.system.models import DataFilter, Dept, User from apps.utils.errors import PKS_ERROR from apps.utils.mixins import MyLoggingMixin from apps.utils.permission import ALL_PERMS, RbacPermission, get_user_perms_map @@ -131,11 +131,15 @@ class CustomModelViewSet(CreateModelMixin, UpdateModelMixin, ListModelMixin, @action(methods=['post'], detail=False, serializer_class=PkSerializer, permission_classes=[IsAdminUser]) def deletes_hard(self, request, *args, **kwargs): + """批量物理删除 + + 批量物理删除 + """ request_data = request.data pks = request_data.get('pks', None) if pks: try: - self.get_queryset(all=True).filter(id__in=pks).delete(soft=False) + self.get_queryset().model.objects.get_queryset(all=True).filter(id__in=pks).delete(soft=False) except Exception: self.get_queryset().filter(id__in=pks).delete() return Response(status=204)