diff --git a/apps/system/migrations/0003_auto_20220624_1327.py b/apps/system/migrations/0003_auto_20220624_1327.py new file mode 100644 index 00000000..c39726fa --- /dev/null +++ b/apps/system/migrations/0003_auto_20220624_1327.py @@ -0,0 +1,25 @@ +# Generated by Django 3.2.12 on 2022-06-24 05:27 + +import apps.system.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('system', '0002_alter_dictionary_value'), + ] + + operations = [ + migrations.AlterModelManagers( + name='user', + managers=[ + ('objects', apps.system.models.SoftDeletableUserManager()), + ], + ), + migrations.AlterField( + model_name='user', + name='phone', + field=models.CharField(blank=True, max_length=11, null=True, unique=True, verbose_name='手机号'), + ), + ] diff --git a/apps/system/migrations/0004_alter_userpost_unique_together.py b/apps/system/migrations/0004_alter_userpost_unique_together.py new file mode 100644 index 00000000..5e16d05a --- /dev/null +++ b/apps/system/migrations/0004_alter_userpost_unique_together.py @@ -0,0 +1,17 @@ +# Generated by Django 3.2.12 on 2022-06-24 05:32 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('system', '0003_auto_20220624_1327'), + ] + + operations = [ + migrations.AlterUniqueTogether( + name='userpost', + unique_together={('user', 'post', 'dept')}, + ), + ] diff --git a/apps/system/models.py b/apps/system/models.py index efb67fd2..d327a186 100755 --- a/apps/system/models.py +++ b/apps/system/models.py @@ -122,7 +122,7 @@ class User(AbstractUser, CommonBModel): """ type = models.CharField('账号类型', max_length=10, default='employee') name = models.CharField('姓名', max_length=20, null=True, blank=True) - phone = models.CharField('手机号', max_length=11, null=True, blank=True) + phone = models.CharField('手机号', max_length=11, null=True, blank=True, unique=True) avatar = models.CharField( '头像', default='/media/default/avatar.png', max_length=100, null=True, blank=True) superior = models.ForeignKey( @@ -156,6 +156,7 @@ class UserPost(BaseModel): verbose_name = '用户岗位关系表' verbose_name_plural = verbose_name ordering = ['sort', 'create_time'] + unique_together = ('user', 'post', 'dept') class DictType(CommonAModel): diff --git a/apps/system/serializers.py b/apps/system/serializers.py index c206d1bd..71fbf875 100755 --- a/apps/system/serializers.py +++ b/apps/system/serializers.py @@ -128,6 +128,7 @@ class DictSerializer(CustomModelSerializer): model = Dictionary fields = '__all__' + class DictSimpleSerializer(CustomModelSerializer): class Meta: model = Dictionary @@ -369,6 +370,9 @@ class UserPostCreateSerializer(CustomModelSerializer): model = UserPost exclude = EXCLUDE_FIELDS_BASE + def create(self, validated_data): + return super().create(validated_data) + class PostRoleSerializer(CustomModelSerializer): """ @@ -390,6 +394,7 @@ class PostRoleCreateSerializer(CustomModelSerializer): model = PostRole fields = ['post', 'role', 'data_range'] + class UserInfoSerializer(CustomModelSerializer): posts_ = UserPostSerializer(source='post', read_only=True) diff --git a/apps/system/views.py b/apps/system/views.py index 5dd38beb..d02a6091 100755 --- a/apps/system/views.py +++ b/apps/system/views.py @@ -351,24 +351,26 @@ class UserPostViewSet(CreateModelMixin, DestroyModelMixin, ListModelMixin, Custo filterset_fields = ['user', 'post', 'dept'] def perform_create(self, serializer): - instance = serializer.save() - user = instance.user - up = UserPost.objects.filter(user=user).order_by('sort', 'create_time').first() - if up: - user.belong_dept = up.dept - user.update_by = self.request.user - user.save() + with transaction.atomic(): + instance = serializer.save() + user = instance.user + up = UserPost.objects.filter(user=user).order_by('sort', 'create_time').first() + if up: + user.belong_dept = up.dept + user.update_by = self.request.user + user.save() def perform_destroy(self, instance): - user = instance.user - instance.delete() - up = UserPost.objects.filter(user=user).order_by('sort', 'create_time').first() - if up: - user.belong_dept = up.dept - else: - user.belong_dept = None - user.update_by = self.request.user - user.save() + with transaction.atomic(): + user = instance.user + instance.delete() + up = UserPost.objects.filter(user=user).order_by('sort', 'create_time').first() + if up: + user.belong_dept = up.dept + else: + user.belong_dept = None + user.update_by = self.request.user + user.save() class UserViewSet(CustomModelViewSet):