李强 2021-05-02 14:09:48 +08:00
parent eb2c1903a2
commit eaa6af5762
2 changed files with 31 additions and 2 deletions

View File

@ -0,0 +1,28 @@
"""
重写校验器返回字段
"""
from rest_framework.validators import UniqueValidator, qs_exists
from vadmin.utils.exceptions import APIException
class CustomUniqueValidator(UniqueValidator):
"""
继承,重写必填字段的验证器结果,防止字段暴露
"""
def __call__(self, value, serializer_field):
# Determine the underlying model field name. This may not be the
# same as the serializer field name if `source=<>` is set.
field_name = serializer_field.source_attrs[-1]
# Determine the existing instance, if this is an update operation.
instance = getattr(serializer_field.parent, 'instance', None)
queryset = self.queryset
queryset = self.filter_queryset(value, queryset, field_name)
queryset = self.exclude_current_instance(queryset, instance)
if qs_exists(queryset):
raise APIException(message=self.message)
def __repr__(self):
return super().__repr__()

View File

@ -1,8 +1,8 @@
from django.contrib.auth import get_user_model
from rest_framework import serializers
from rest_framework.validators import UniqueValidator
from ..op_drf.serializers import CustomModelSerializer
from ..op_drf.validator import CustomUniqueValidator
from ..permission.models import Menu, Dept, Post, Role
from ..system.models import MessagePush
@ -260,7 +260,8 @@ class UserProfileCreateUpdateSerializer(CustomModelSerializer):
post = PostSerializer(many=True, read_only=True)
role = RoleSerializer(many=True, read_only=True)
username = serializers.CharField(required=True, max_length=150,
validators=[UniqueValidator(queryset=UserProfile.objects.all(), message="用戶已存在")],
validators=[
CustomUniqueValidator(queryset=UserProfile.objects.all(), message="用戶已存在")],
error_messages={
"blank": "请输入用户名称",
"required": "用户名称不能为空",