entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

¿Cómo validar que el "username" del usuario ya exista en Django?

Saludos amigos. Cómo hago para comprobar en mi vista si el username o seudónimo insertado por el usuario existe o no?.

views.py

def register_view(request):
  info1=""
  info2=""
  form = RegisterForm()

  if request.method == "POST":
    form = RegisterForm(request.POST)
    if form.is_valid():
        cedula = form.cleaned_data['cedula']
        nombre = form.cleaned_data['nombre']
        telefono = form.cleaned_data['telefono']
        correo = form.cleaned_data['email']
        is_staff    =   form.cleaned_data['Tutor']
        usuario = form.cleaned_data['username']
        password_one = form.cleaned_data['password_one']
        password_two = form.cleaned_data['password_two']

        if User.objects.filter(username=usuario).count():
            info1="Usuario ya existente"
            raise forms.ValidationError(u'Username "%s" is already in use.' % usuario)
        else:
            u = User.objects.create_user(first_name=nombre,username=usuario, email=correo, password=password_one)
            u.is_staff=is_staff
            perfil = userprofile()
            perfil.cedula = cedula
            perfil.nombre = nombre
            perfil.telefono = telefono
            u.save()
            perfil.save()
            info2 ="Usuario Registrado Exitosamente"
            form = RegisterForm()

ctx = {'form': form,'info1':info1,'info2':info2}
return render_to_response('home/register.html', ctx, context_instance=RequestContext(request))

De antemano muchas gracias por el respaldo que, en cuanto a Django refiere.

2 Respuestas

1voto

white Puntos75880

Debes agregar una funcion a tu clase RegisterForm debe llamarse clean

suponiendo que el modelo de los usuarios es Usuarios

class RegisterForm(forms.Form):

    username = forms.CharField(label = 'Nombre de usuario', max_length = 35)

    def clean(self):

        cleaned_data = super(RegisterForm, self).clean()

        user_exists = (Usuarios.objects.filter(username = cleaned_data.get('username')).count() > 0)

        if user_exists:
            self.add_error('username', 'ese usuario ya existe')

tu template deberia mostrar el error sin problemas.

<form action="/" method="post">
    {% for field in form.visible_fields %}
    <div>
        {{ field.errors }}
        {{ field.label_tag }} {{ field }}
    </div>
    {% endfor %}
    {% for hidden in form.hidden_fields %}
            {{ hidden }}
    {% endfor %}
    {% csrf_token %}
    <input type="submit" value="Submit" />
</form>

0voto

pity7736 Puntos860
  1. Las validaciones no se hacen en el views.py sino en el forms.py
  2. El modelo User indica que username es unico, por lo que ya tiene esa validación por defecto.
  3. No necesita agregar cada campo obteniéndolo del form, con el método save(), django hace su magia.

0voto

ibrames comentado

Muchas gracias en verdad. Lo arreglaré.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta