From 080d13b37cc1bcb2eb48ee2996156070c60221cd Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 11 Apr 2022 16:42:00 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=92=E8=89=B2=E5=94=AF=E4=B8=80=E6=A0=87?= =?UTF-8?q?=E8=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/system/errors.py | 4 +++- apps/system/serializers.py | 24 +++++++++++++++++++----- apps/system/views.py | 1 + 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/apps/system/errors.py b/apps/system/errors.py index 49d4ea3c..838c0b1b 100644 --- a/apps/system/errors.py +++ b/apps/system/errors.py @@ -3,4 +3,6 @@ PASSWORD_NOT_SAME = {"code":"password_not_same", "detail":"新旧密码不一致 OLD_PASSWORD_WRONG = {"code":"old_password_wrong", "detail":"旧密码错误"} PHONE_F_WRONG = {"code":"phone_f_wrong", "detail":"手机号格式错误"} PHONE_EXIST = {"code":"phone_exist", "detail":"手机号已存在"} -USERNAME_EXIST = {"code":"username_exist", "detail":"账户已存在"} \ No newline at end of file +USERNAME_EXIST = {"code":"username_exist", "detail":"账户已存在"} +ROLE_NAME_EXIST = {"code":"role_name_exist", "detail":"角色名已存在"} +ROLE_CODE_EXIST = {"code":"role_code_exist", "detail":"角色标识已存在"} \ No newline at end of file diff --git a/apps/system/serializers.py b/apps/system/serializers.py index 937cadd5..8079674a 100644 --- a/apps/system/serializers.py +++ b/apps/system/serializers.py @@ -3,7 +3,7 @@ import re from django_celery_beat.models import PeriodicTask, CrontabSchedule, IntervalSchedule from rest_framework import serializers from django_celery_results.models import TaskResult -from apps.system.errors import PHONE_EXIST, PHONE_F_WRONG, USERNAME_EXIST +from apps.system.errors import PHONE_EXIST, PHONE_F_WRONG, ROLE_CODE_EXIST, ROLE_NAME_EXIST, USERNAME_EXIST from apps.utils.serializers import CustomModelSerializer from apps.utils.constants import EXCLUDE_FIELDS, EXCLUDE_FIELDS_BASE from .models import (Dict, DictType, File, Dept, Permission, Post, @@ -140,13 +140,27 @@ class RoleCreateUpdateSerializer(CustomModelSerializer): """ 角色序列化 """ - name = serializers.CharField(label="名称", validators=[ - UniqueValidator(queryset=Role.objects.all(), message='已存在相同名称的角色')]) - code = serializers.CharField(label="标识", validators=[ - UniqueValidator(queryset=Role.objects.all(), message='已存在相同标识的角色')]) class Meta: model = Role exclude = EXCLUDE_FIELDS + + def create(self, validated_data): + if validated_data.get('name', None): + if Role.objects.filter(name=validated_data['name']).exists(): + raise serializers.ValidationError(**ROLE_NAME_EXIST) + if validated_data.get('code', None): + if Role.objects.filter(code=validated_data['code']).exists(): + raise serializers.ValidationError(**ROLE_CODE_EXIST) + return super().create(validated_data) + + def update(self, instance, validated_data): + if validated_data.get('name', None): + if Role.objects.filter(name=validated_data['name']).exclude(id=instance.id).exists(): + raise serializers.ValidationError(**ROLE_NAME_EXIST) + if validated_data.get('code', None): + if Role.objects.filter(code=validated_data['code']).exclude(id=instance.id).exists(): + raise serializers.ValidationError(**ROLE_CODE_EXIST) + return super().update(instance, validated_data) class PermissionSerializer(CustomModelSerializer): """ diff --git a/apps/system/views.py b/apps/system/views.py index 2611dd40..52370ac5 100644 --- a/apps/system/views.py +++ b/apps/system/views.py @@ -254,6 +254,7 @@ class RoleViewSet(CustomModelViewSet): serializer_class = RoleSerializer create_serializer_class = RoleCreateUpdateSerializer update_serializer_class = RoleCreateUpdateSerializer + partial_update_serializer_class = RoleCreateUpdateSerializer search_fields = ['name', 'code']