Ayuda en Django

19 views
Skip to first unread message

Luis eu

unread,
Dec 26, 2016, 9:35:39 PM12/26/16
to Python Venezuela
Buenas noches amigos de Python Venezuela , gracias por aceptar mi solicitud y pertenecer a este grupo de programadores. En estos momentos me encuentro realizando un proyecto y el día de hoy me he encontrado con un problema el cual consiste en que mi formulario generado de un modelo no guarda la información en la base de datos 

views.py 

def Registro(request,plan):
if request.method == 'POST':
form = RegistroUsuario(request.POST)
form2 = RegistroEmpresa(request.POST)
form3= RegistroCamion(request.POST)
if form.is_valid() and form2.is_valid() :
registro = form.cleaned_data.get('tipo_de_cliente')
nombre = form.cleaned_data.get('nombre')
telefono_celular = form.cleaned_data.get('telefono_celular')
rif = form.cleaned_data.get('rif')
correo = form.cleaned_data.get('correo')
contraseña = form.cleaned_data.get('contraseña')
cliente = Usuario(tipo_de_cliente=registro, carga_de_pila='10',tipo_de_cuenta=plan,nombre=nombre,telefono_celular=telefono_celular,rif=rif,correo=correo,contraseña=contraseña)
cliente.empresa = form2.save()
cliente.camiones= form3.save()
cliente.save()
return redirect('Completado')
else:
form = RegistroUsuario
form2 = RegistroEmpresa
form3 = RegistroCamion
return render(request, 'registro/PlanGratuito.html', {'form': form,'form2':form2,'form3':form3})

esta es la función de mi vista la cual consiste en tomar los valores de mi formulario y hace un redirect a otra página

Cual es el problema, que cuando intento darle submit a mi formulario se refresca la página como si no tuviera ninguna acción
y otras veces si registra la información. He pensado que puede ser algún tema de sincronización de la página con la base de datos
ya que al darle refresh a la pagina si me almacena la información en la base de datos.
Gracias espero su pronta respuesta

David De Sousa

unread,
Dec 27, 2016, 5:17:06 PM12/27/16
to Python Venezuela
Hola Luis,

Bueno, sin tener el código del forms.py o del models.py lo más que estoy haciendo es asumiendo varias cosas.

El comportamiento que estás teniendo tiene todo el sentido que a veces guarde y a veces no porque en el caso de ser un POST, si el form de Usuario y Empresa no son válidos, te va a pasar lo que mencionas, no sé si en tu template estás mostrando los errores pero por lo que dices me imagino que no.

Por otra parte te recomendaría hacer un solo form que contenga todo el contenido que quieres usando ModelForm e InlineFormSets. [1]

Si creas sólo un form para eso, puedes ir aún más lejos y usar views genéricos como el FormView [2] y te ahorras un montón de código para lo que quieres y además el código de las pruebas sería mínimo si no tienes validaciones extras.

Avísame porfa si por ahí van los tiros.

PD: te recomiendo usar un verificador de código como flake8 [3] ya que noté varias cosas en el código que no se acoplan al "python way"


Saludos

--
Este es un mensaje del foro Python de Venezuela - http://www.python.org.ve
Para suscripciones y retiros: http://goo.gl/ug9by
---
Has recibido este mensaje porque estás suscrito al grupo "Python Venezuela" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a python-venezue...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Luis eu

unread,
Dec 27, 2016, 6:12:52 PM12/27/16
to python-v...@googlegroups.com
Hola David muchas gracias por la pronta respuesta acá les paso mi models.py y mi form.py

models.py

class Empresa(models.Model):
id = models.AutoField(primary_key=True, unique=True)
nombre = models.CharField(max_length=100, blank=True, null=True)
actividad = models.CharField(max_length=200, blank=True, null=True)
sector_economico = models.CharField(max_length=200, blank=True, null=True)
direccion = models.CharField(max_length=200, blank=True, null=True)
telefono = models.IntegerField(null=True)
rif = models.CharField(max_length=200, blank=True, null=True)
cantidad_de_trabajadores = models.CharField(max_length=200, blank=True, null=True)
representante = models.CharField(max_length=200, blank=True, null=True)
contacto_de_represnetante = models.CharField(max_length=200, blank=True, null=True)
correo = models.EmailField(max_length=200, blank=True, null=True,unique=True)
pagina_web = models.URLField(max_length=200, blank=True, null=True)
ciudades_donde_comercia = models.CharField(max_length=200, blank=True, null=True)
fecha_de_registro = models.DateField(auto_now_add=True)

def __str__(self):
return '{}'.format(self.nombre)



class Camion(models.Model):
id = models.AutoField(primary_key=True, unique=True)
capacidad_de_carga = models.IntegerField(null=True)
marca = models.CharField(max_length=50,blank=True,null=True)
modelo = models.CharField(max_length=50,blank=True,null=True)
version = models.CharField(max_length=50,blank=True,null=True)
año = models.DateField(blank=True,null=True)
placa = models.CharField(max_length=50,blank=True,null=True)
carroceria = models.CharField(max_length=500,blank=True,null=True)
altura = models.IntegerField(blank=True,null=True)
color = models.CharField(max_length=20,blank=True,null=True)
premio_1 = models.CharField(max_length=72,blank=True,null=True)
premio_2 = models.CharField(max_length=72,blank=True,null=True)
premio_3 = models.CharField(max_length=72,blank=True,null=True)
premio_4 = models.CharField(max_length=72,blank=True,null=True)
premio_5 = models.CharField(max_length=72,blank=True,null=True)
fecha_de_registro = models.DateField(blank=True,null=True)

def __str__(self):
return '{}'.format(self.modelo)


class Usuario(models.Model):
id = models.AutoField(primary_key=True,unique=True)
nombre = models.CharField(max_length=50,blank=True,null=True)
tipo_de_cliente = models.CharField(max_length=100,null=True,blank=True)
ciudad = models.CharField(max_length=50, blank=True, null=True, unique=True)
cedula = models.CharField(max_length=50,blank=True,null=True, unique=True)
contraseña = models.CharField(max_length=50,blank=True,null=True)
direccion_de_residencia = models.TextField(max_length=50,blank=True,null=True)
telefono_fijo = models.IntegerField(null=True,blank=True)
telefono_celular = models.IntegerField(null=True,blank=True)
fecha_de_nacimiento = models.DateField(null=True,blank=True)
rif = models.CharField(max_length=50,blank=True,null=True, unique=True)
sexo = models.CharField(max_length=50,blank=True,null=True)
correo = models.EmailField(blank=True,null=True,unique=True)
foto = models.ImageField(upload_to='photos',blank=True,null=True)
profesion = models.CharField(max_length=50, blank=True, null=True)
nivel_educativo = models.CharField(max_length=50, blank=True, null=True)
cuentas_bancarias = models.CharField(max_length=50, blank=True, null=True)
fecha_de_registro = models.DateField(auto_now_add=True)
camiones = models.ForeignKey(Camion, null=True, blank=True, on_delete=models.CASCADE)
tipo_de_cuenta = models.CharField(max_length=30)
twitter = models.CharField(max_length=50, blank=True, null=True)
facebook = models.CharField(max_length=50, blank=True, null=True)
carga_de_pila = models.IntegerField(null=True)
reputacion = models.IntegerField(null=True)
porcentaje_de_registro = models.IntegerField(null=True)

# INFORMACIÓN LABORAL

empresa = models.ForeignKey(Empresa,max_length=200, blank=True, null=True, on_delete=models.CASCADE)

def __str__(self):
return '{}'.format(self.tipo_de_cliente)

def __unicode__(self):
return self.tipo_de_cliente

form.py
class RegistroUsuario(forms.ModelForm):
class Meta:

model = Usuario
fields = [
'tipo_de_cliente',
"nombre",
"telefono_celular",
"rif",
# "fecha_de_nacimiento",
"correo",
"contraseña",

]
labels = {
'tipo_de_cliente': '',
"nombre":'',
"telefono_celular":'',
"rif": '',
#"fecha_de_nacimiento":'',
"correo":'',
"contraseña":'',

}
widgets = {
'tipo_de_cliente': forms.Select(choices=CLIENTES_CHOICES, attrs={'class': 'form-control'}),
"nombre": forms.TextInput(attrs={'class': 'form-control','placeholder':'Nombre Completo'}),
"telefono_celular": forms.TextInput(attrs={'class': 'form-control','placeholder':'Teléfono Celular'}),
"rif": forms.TextInput(attrs={'class': 'form-control','placeholder':'RIF'}),
#"fecha_de_nacimiento": forms.DateInput(attrs={'class': 'form-control','placeholder':'Fecha de Nacimiento'}),
"correo": forms.EmailInput(attrs={'class': 'form-control','placeholder':'Correo Electronico'}),
"contraseña":forms.PasswordInput(attrs={'class': 'form-control','placeholder':'Contraseña'}),

}

class RegistroCamion(forms.ModelForm):
class Meta:
model = Camion
fields = [
"modelo",
"marca",
"carroceria",
"placa"
]
labels = {
"modelo" : '',
"marca" : '',
"carroceria":'',
"placa":''
}
widgets = {
"modelo": forms.TextInput(attrs={'class': 'form-control','placeholder':'Modelo'}),
"marca": forms.TextInput(attrs={'class': 'form-control','placeholder':'Marca'}),
"carroceria": forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Carroceria'}),
"placa": forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Placa'}),
}



class RegistroEmpresa(forms.ModelForm):
class Meta:
model = Empresa
fields = [
"actividad",
"rif"
]
labels ={
"actividad":'',
"rif":'',
}
widgets = {
"actividad": forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Actividad o Razon Social'}),
"rif": forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'RIF'}),
}

disculpa si es algo extenso mi código siempre intento mejorarlo a medida de que voy aprendiendo, no he usado vistas basadas en clases ya que necesito 
pasar una variable de una página a otra como se especifica en mi función 
def Registro(request,plan):
        if request.method == 'POST':
form = RegistroUsuario(request.POST)
form2 = RegistroEmpresa(request.POST)
form3= RegistroCamion(request.POST)
if form.is_valid() and form2.is_valid() :
registro = form.cleaned_data.get(
'tipo_de_cliente')
nombre = form.cleaned_data.get(
'nombre')
telefono_celular = form.cleaned_data.get(
'telefono_celular')
rif = form.cleaned_data.get(
'rif')
correo = form.cleaned_data.get(
'correo')
contraseña = form.cleaned_data.get(
'contraseña')
cliente = Usuario(
tipo_de_cliente=registro, carga_de_pila='10',tipo_de_cuenta= plan
Por otra parte se generan 3 form ya que uno depende dos un foreignkey necesarios para guardarlo en otro lado y llegue a pensar a pensar que puede ser algún problema con Jquery  ya que los 3 formularios están dentro de un form y los efecto de Jquery es del tipo Wizard form dándole efectos hide a los botones y esection de los formulario para que sea un formulario paso por paso

Gracias por los consejos, espero su pronta respuesta

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a python-venezuela+unsubscribe@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Este es un mensaje del foro Python de Venezuela - http://www.python.org.ve
Para suscripciones y retiros: http://goo.gl/ug9by
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "Python Venezuela" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/python-venezuela/bBu7ifEu6es/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a python-venezuela+unsubscribe@googlegroups.com.

José Rengifo

unread,
Dec 27, 2016, 6:23:26 PM12/27/16
to python-v...@googlegroups.com
de ser posible sería más facil si postearas tu código en github o bitbucket para observarlo mejor, saludos...

Luis eu

unread,
Dec 27, 2016, 7:07:04 PM12/27/16
to python-v...@googlegroups.com
Buenas noches Jose aca te dejo el repositorio https://github.com/Lmeu/Proyecto-1/tree/master/TusCamiones Saludos 

David De Sousa

unread,
Dec 27, 2016, 7:07:24 PM12/27/16
to python-v...@googlegroups.com
sí, leer el código en el correo no es agradable, podrías crear un gist y sería más fácil, de todas maneras la recomendación es la misma, usa InlineFormsets y un FormView y te ahorras un montón de problemas, no veo cuál es el problema con jquery, al final tú controlas las clases de los widgets, puedes hacer lo que quieres.

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a python-venezue...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Este es un mensaje del foro Python de Venezuela - http://www.python.org.ve
Para suscripciones y retiros: http://goo.gl/ug9by
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "Python Venezuela" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/python-venezuela/bBu7ifEu6es/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a python-venezue...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Este es un mensaje del foro Python de Venezuela - http://www.python.org.ve
Para suscripciones y retiros: http://goo.gl/ug9by
---
Has recibido este mensaje porque estás suscrito al grupo "Python Venezuela" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a python-venezue...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Este es un mensaje del foro Python de Venezuela - http://www.python.org.ve
Para suscripciones y retiros: http://goo.gl/ug9by
---
Has recibido este mensaje porque estás suscrito al grupo "Python Venezuela" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a python-venezue...@googlegroups.com.

Luis eu

unread,
Dec 27, 2016, 7:44:20 PM12/27/16
to python-v...@googlegroups.com
Muchas gracias por las recomendaciones David, en dado caso el Formview como puede recibir parametros desde otra vista mediante la url ? alguna recomendacion o documentación

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a python-venezuela+unsubscribe@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Este es un mensaje del foro Python de Venezuela - http://www.python.org.ve
Para suscripciones y retiros: http://goo.gl/ug9by
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "Python Venezuela" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/python-venezuela/bBu7ifEu6es/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a python-venezuela+unsubscribe@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Este es un mensaje del foro Python de Venezuela - http://www.python.org.ve
Para suscripciones y retiros: http://goo.gl/ug9by
---
Has recibido este mensaje porque estás suscrito al grupo "Python Venezuela" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a python-venezuela+unsubscribe@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Este es un mensaje del foro Python de Venezuela - http://www.python.org.ve
Para suscripciones y retiros: http://goo.gl/ug9by
---
Has recibido este mensaje porque estás suscrito al grupo "Python Venezuela" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a python-venezuela+unsubscribe@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Este es un mensaje del foro Python de Venezuela - http://www.python.org.ve
Para suscripciones y retiros: http://goo.gl/ug9by
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "Python Venezuela" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/python-venezuela/bBu7ifEu6es/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a python-venezuela+unsubscribe@googlegroups.com.

David De Sousa

unread,
Dec 28, 2016, 5:15:15 PM12/28/16
to python-v...@googlegroups.com
en [1] puedes ver que en self.args y self.kwargs está lo que andas buscando, lo puedes meter en el initial con el get_initial() [2]


Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a python-venezue...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Este es un mensaje del foro Python de Venezuela - http://www.python.org.ve
Para suscripciones y retiros: http://goo.gl/ug9by
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "Python Venezuela" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/python-venezuela/bBu7ifEu6es/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a python-venezue...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Este es un mensaje del foro Python de Venezuela - http://www.python.org.ve
Para suscripciones y retiros: http://goo.gl/ug9by
---
Has recibido este mensaje porque estás suscrito al grupo "Python Venezuela" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a python-venezue...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Este es un mensaje del foro Python de Venezuela - http://www.python.org.ve
Para suscripciones y retiros: http://goo.gl/ug9by
---
Has recibido este mensaje porque estás suscrito al grupo "Python Venezuela" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a python-venezue...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Este es un mensaje del foro Python de Venezuela - http://www.python.org.ve
Para suscripciones y retiros: http://goo.gl/ug9by
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "Python Venezuela" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/python-venezuela/bBu7ifEu6es/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a python-venezue...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Este es un mensaje del foro Python de Venezuela - http://www.python.org.ve
Para suscripciones y retiros: http://goo.gl/ug9by
---
Has recibido este mensaje porque estás suscrito al grupo "Python Venezuela" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a python-venezue...@googlegroups.com.

Luis eu

unread,
Dec 28, 2016, 7:37:35 PM12/28/16
to python-v...@googlegroups.com
Muchas gracias por responder David, pude encontrar los errores, resulta que coloco dentro de mi html {{ form.errors}} y me percate que  al colocar la unique a un campo modelo como fue con rif = models.Chartfield(blank = True, Null = True , unique = True) si un usuario hace un registro sin completar el campo , al momento de otro usuario registrarse y nuevamente dejar este campo vacio te lo cuenta como existente y ese era el error, muy agradecido con su ayuda. Saludos

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a python-venezuela+unsubscribe@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Este es un mensaje del foro Python de Venezuela - http://www.python.org.ve
Para suscripciones y retiros: http://goo.gl/ug9by
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "Python Venezuela" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/python-venezuela/bBu7ifEu6es/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a python-venezuela+unsubscribe@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Este es un mensaje del foro Python de Venezuela - http://www.python.org.ve
Para suscripciones y retiros: http://goo.gl/ug9by
---
Has recibido este mensaje porque estás suscrito al grupo "Python Venezuela" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a python-venezuela+unsubscribe@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Este es un mensaje del foro Python de Venezuela - http://www.python.org.ve
Para suscripciones y retiros: http://goo.gl/ug9by
---
Has recibido este mensaje porque estás suscrito al grupo "Python Venezuela" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a python-venezuela+unsubscribe@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Este es un mensaje del foro Python de Venezuela - http://www.python.org.ve
Para suscripciones y retiros: http://goo.gl/ug9by
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "Python Venezuela" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/python-venezuela/bBu7ifEu6es/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a python-venezuela+unsubscribe@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Este es un mensaje del foro Python de Venezuela - http://www.python.org.ve
Para suscripciones y retiros: http://goo.gl/ug9by
---
Has recibido este mensaje porque estás suscrito al grupo "Python Venezuela" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a python-venezuela+unsubscribe@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Este es un mensaje del foro Python de Venezuela - http://www.python.org.ve
Para suscripciones y retiros: http://goo.gl/ug9by
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "Python Venezuela" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/python-venezuela/bBu7ifEu6es/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a python-venezuela+unsubscribe@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages