diff --git a/apps/account/serializers/common.py b/apps/account/serializers/common.py index deb0217e..b6de5bb0 100644 --- a/apps/account/serializers/common.py +++ b/apps/account/serializers/common.py @@ -4,9 +4,11 @@ from django.contrib.auth import password_validation as password_validators from fcm_django.models import FCMDevice from rest_framework import exceptions from rest_framework import serializers +from rest_framework import validators as rest_validators from account import models, tasks from utils import exceptions as utils_exceptions +from utils import methods as utils_methods # User serializers @@ -17,12 +19,17 @@ class UserSerializer(serializers.ModelSerializer): fullname = serializers.CharField(source='get_full_name', read_only=True) # REQUEST - username = serializers.CharField(required=False) + username = serializers.CharField( + validators=(rest_validators.UniqueValidator(queryset=models.User.objects.all()),), + write_only=True, + required=False) first_name = serializers.CharField(required=False, write_only=True) last_name = serializers.CharField(required=False, write_only=True) image = serializers.ImageField(required=False) cropped_image = serializers.ImageField(required=False) - email = serializers.EmailField(required=False) + email = serializers.EmailField( + validators=(rest_validators.UniqueValidator(queryset=models.User.objects.all()),), + required=False) newsletter = serializers.BooleanField(required=False) class Meta: @@ -43,14 +50,13 @@ class UserSerializer(serializers.ModelSerializer): """Validate email value""" if value == self.instance.email: raise serializers.ValidationError() - if models.User.objects.filter(email=value).exists(): - raise serializers.ValidationError() return value def validate_username(self, value): - """Validate username""" - if models.User.objects.filter(username=value).exists(): - raise serializers.ValidationError() + """Custom username validation""" + valid = utils_methods.username_validator(username=value) + if not valid: + raise utils_exceptions.NotValidUsernameError() return value def validate(self, attrs): diff --git a/apps/authorization/serializers/common.py b/apps/authorization/serializers/common.py index e5c615e0..5817e191 100644 --- a/apps/authorization/serializers/common.py +++ b/apps/authorization/serializers/common.py @@ -21,8 +21,7 @@ class SignupSerializer(serializers.ModelSerializer): # REQUEST username = serializers.CharField( validators=(rest_validators.UniqueValidator(queryset=account_models.User.objects.all()),), - write_only=True - ) + write_only=True) password = serializers.CharField(write_only=True) email = serializers.EmailField( validators=(rest_validators.UniqueValidator(queryset=account_models.User.objects.all()),), @@ -38,21 +37,21 @@ class SignupSerializer(serializers.ModelSerializer): 'newsletter' ) - def validate_username(self, data): + def validate_username(self, value): """Custom username validation""" - valid = utils_methods.username_validator(username=data) + valid = utils_methods.username_validator(username=value) if not valid: raise utils_exceptions.NotValidUsernameError() - return data + return value - def validate_password(self, data): + def validate_password(self, value): """Custom password validation""" try: - password_validators.validate_password(password=data) + password_validators.validate_password(password=value) except serializers.ValidationError as e: raise serializers.ValidationError(str(e)) else: - return data + return value def create(self, validated_data): """Override create method"""