Django Rest Framework Extra kwargs fields for Password and Unique Email
Traté de crear serializadores para mi Modelo y probé el Modelo de serialización Quiero que el campo de contraseña se escriba ****
formato cuando trato de entrar contraseña y correo electrónico para ser único en los campos de kwargs extra ¿cómo puedo hacer eso?
Aquí están mis serializadores que intenté.
User = get_user_model()
class AddBusCompanyUserSerializer(serializers.ModelSerializer):
position = serializers.PrimaryKeyRelatedField(queryset=StaffPosition.objects.all())
class Meta:
model = User
fields = (
'phone_number',
'password',
'position',
'email',
)
extra_kwargs = {'password': {'write_only': True},'email':?}
}
¿Qué validador debo tratar de hacer que el email sea único y el campo de contraseña se escribe en formato ****?
Pregunta hecha hace 3 años, 4 meses, 29 días - Por algoarchitect
3 Respuestas:
-
Por fin trabajo por mi cuenta
extra_kwargs = { 'password': { 'write_only': True, 'style': {'input_type': 'password'} }, 'email': { 'validators': [ UniqueValidator( queryset=User.objects.all() ) ] } } 'style': {'input_type': 'password'}
permite que la contraseña esté en formato **** en serializadores y
'validators': [ UniqueValidator( queryset=User.objects.all() ) ]
permite que el correo electrónico sea único
Respondida el Dec 17, 2020 a las 14:10 - por daniel1
Votos positivos: 0 | Votos negativos: 0 -
Para hacer que el campo de contraseña se escriba en formato
<strong>None</strong>
al ser introducido y que el campo de correo electrónico sea único, puedes hacer lo siguiente en tu serializador:python User = get_user_model() class AddBusCompanyUserSerializer(serializers.ModelSerializer): position = serializers.PrimaryKeyRelatedField(queryset=StaffPosition.objects.all()) password = serializers.CharField(write_only=True, style={'input_type': 'password'})
Para ocultar la contraseña al escribirla
class Meta: model = User fields = ( 'phone_number', 'password', 'position', 'email', ) extra_kwargs = { 'email': {'validators': [UniqueValidator(queryset=User.objects.all())]}Validador para campo email único
}En este caso:
- `style={'input_type': 'password'}` en el campo de la contraseña hace que se muestre como `None` al escribirla.
- `
` en el campo de email añade un validador que verificará que el email sea único en la base de datos.
Al añadir estos cambios a tu serializador, el campo de contraseña se mostrará de forma oculta al escribir y el campo de email será validado para ser único en la base de datos.
Respondida el Dec 18, 2020 a las 14:12 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Serializador para escribir contraseña como
</strong><strong>
:Para escribir el campo de contraseña como
<strong>None</strong>
en el serializador, puedes usar el atributostyle
enextra_kwargs
.python class AddBusCompanyUserSerializer(serializers.ModelSerializer): position = serializers.PrimaryKeyRelatedField(queryset=StaffPosition.objects.all()) class Meta: model = User fields = ( 'phone_number', 'password', 'position', 'email', ) extra_kwargs = { 'password': {'write_only': True, 'style': {'input_type': 'password'}}, 'email': ...,
Aquí va el validador para el campo de correo electrónico único
}Validador para el campo de correo electrónico único:
Para hacer que el campo de correo electrónico sea único, puedes usar un validador personalizado.
python from django.core.exceptions import ValidationError def unique_email_validator(value): if User.objects.filter(email=value).exists(): raise ValidationError("Este correo electrónico ya está en uso.") class AddBusCompanyUserSerializer(serializers.ModelSerializer): position = serializers.PrimaryKeyRelatedField(queryset=StaffPosition.objects.all()) class Meta: model = User fields = ( 'phone_number', 'password', 'position', 'email', ) extra_kwargs = { 'password': {'write_only': True, 'style': {'input_type': 'password'}}, 'email': {'validators': [unique_email_validator]} }
Uso del serializador:
Una vez que tengas el serializador actualizado, puedes usarlo para crear o actualizar objetos de usuario:
python serializer = AddBusCompanyUserSerializer(data=request.data) if serializer.is_valid(): serializer.save()
Respondida el Dec 18, 2020 a las 14:21 - por Gemini
Votos positivos: 0 | Votos negativos: 0