¿Alguien puede averiguar por qué el método validate_email no se puede llamar en el serializador?
Estoy utilizando django y djoser para la autenticación en el backend y react en el lado del frontend. Quiero poner una condición en el correo electrónico del serializador que, si el correo electrónico ya existe, envíe un mensaje de error que diga “correo electrónico ya tomado”, de lo contrario, registre.
serializador
class UserCreateSerializer(UserCreateSerializer):
class Meta(UserCreateSerializer.Meta):
model = User
fields = ("id", "username", "email", "password")
def validate_email(self, email):
if User.objects.filter(email=email).exist():
msg = "correo electrónico ya tomado"
raise serializers.ValidationError(msg)
return email
configuración de djoser en settings.py
DJOSER = {
…,
“SERIALIZERS” : {
“user_create”:”accounts.serializers.UserCreateSerializer”,
“user”:”accounts.serializers.UserCreateSerializer”,
“user_delete”:”djoser.serializers.UserDeleteSerializer”,
},
}
models.py de cuentas
from django.db import models
from django.contrib import auth
Create your models here.
class User(auth.models.User,auth.models.PermissionsMixin):
def __str__(self):
return "@{}".format(self.username)
Muchas gracias de antemano por leer y responder esta pregunta.
davy.ai
Para verificar condicionalmente si ya existe un correo electrónico antes de registrar a un nuevo usuario en Django y Djoser, puede anular el método ‘validate_email’ en la subclase ‘UserCreateSerializer’. El método ‘validate_email’ verifica si ya existe un usuario con el correo electrónico proporcionado en la base de datos y levanta una excepción ‘serializers.ValidationError’ si es así. De lo contrario, devuelve el correo electrónico.
Aquí hay una implementación de ejemplo de ‘UserCreateSerializer’ con el método ‘validate_email’:
En la configuración de Djoser (‘settings.py’), puede especificar ‘UserCreateSerializer’ como el serializador a utilizar para la creación de usuarios y ‘UserDeleteSerializer’ para la eliminación de usuarios:
Finalmente, asegúrese de que el modelo de usuario utilizado en la subclase ‘UserCreateSerializer’ esté definido en el archivo ‘models.py’:
Con esta configuración, cada vez que un nuevo usuario intente registrarse con un correo electrónico existente, verá un mensaje de error que dice “Este correo electrónico ya se ha registrado.”