Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] Insert Multiple

Estas en el tema de Insert Multiple en el foro de Python en Foros del Web. Hola soy nuevo en esto y estoy necesitando hacer un insert multipe algo asi: INSERT INTO table1 ( column1 ) SELECT col1 FROM table2. Pero ...
  #1 (permalink)  
Antiguo 24/04/2013, 08:41
 
Fecha de Ingreso: abril-2013
Mensajes: 10
Antigüedad: 11 años
Puntos: 0
Insert Multiple

Hola soy nuevo en esto y estoy necesitando hacer un insert multipe algo asi: INSERT INTO table1 ( column1 ) SELECT col1 FROM table2. Pero debe ser a partir de un formulario donde se ingresa algunos datos. Lo que hice fue esto:

Código Python:
Ver original
  1. def poceso_insertar(request):
  2.     lista_alumnos = Alumno.objects.all()
  3.     if request.method == "POST":
  4.         cuentaf = CuentaForm(request.POST)
  5.         if cuentaf.is_valid():
  6.             for i in lista_alumnos:
  7.                 addmovi = cuentaf.save(commit=False)
  8.                 addmovi.Alumno_id = i.dni
  9.                 addmovi.save()
  10.     else:
  11.         cuentaf = CuentaForm()
  12.  
  13.     return render_to_response ...

De esta manera logro hacer el insert pero solo lo hace en el primer registro. Que estoy haciendo mal??? Gracias!!!

Última edición por razpeitia; 24/04/2013 a las 08:56
  #2 (permalink)  
Antiguo 24/04/2013, 09:04
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Insert Multiple

Le estas asignando diferentes valores a un campo. Obviamente se queda con el ultimo valor.

Realmente no se que es lo quieres hacer.
  #3 (permalink)  
Antiguo 25/04/2013, 09:45
 
Fecha de Ingreso: abril-2013
Mensajes: 10
Antigüedad: 11 años
Puntos: 0
Respuesta: Insert Multiple

Cita:
Iniciado por razpeitia Ver Mensaje
Le estas asignando diferentes valores a un campo. Obviamente se queda con el ultimo valor.

Realmente no se que es lo quieres hacer.
Lo que necesito hacer es insertar un movimiento para todos los alumnos. Es decir tengo dos tablas (Alumno, Cuenta). Lo que necesito es hacer un insert en Cuenta de todos los alumnos con un importe que ingreso en un formulario. Es un poco confuso pero tengo un formulsario asi:

fecha:
detalle:
importe:

<registrar>

A partir de ese formulario quiero que inserte ese movimiento para todos los alumnos.
  #4 (permalink)  
Antiguo 25/04/2013, 13:19
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Insert Multiple

Estoy casi seguro que te falta una tabla donde mantener esos registros.

Por lo que tengo entendido Cuenta solamente tiene los campos fecha, detalle e importe.
Y Alumno voy a suponer que solamente hay datos de alumnos, nombre, apellido, matricula, etc...

Pero no veo donde asociarías Cuenta y Alumno.

¿Puedes poner el codigo de esos 2 modelos?
¿Que tipo de relación tienen Cuenta y Alumno? (Uno a uno, uno a muchos y la dirección, o muchos a muchos?)
  #5 (permalink)  
Antiguo 25/04/2013, 13:33
 
Fecha de Ingreso: abril-2013
Mensajes: 10
Antigüedad: 11 años
Puntos: 0
Respuesta: Insert Multiple

Cita:
Iniciado por razpeitia Ver Mensaje
Estoy casi seguro que te falta una tabla donde mantener esos registros.

Por lo que tengo entendido Cuenta solamente tiene los campos fecha, detalle e importe.
Y Alumno voy a suponer que solamente hay datos de alumnos, nombre, apellido, matricula, etc...

Pero no veo donde asociarías Cuenta y Alumno.

¿Puedes poner el codigo de esos 2 modelos?
¿Que tipo de relación tienen Cuenta y Alumno? (Uno a uno, uno a muchos y la dirección, o muchos a muchos?)

Si tengo esto:

model.py:

Código Python:
Ver original
  1. class Cuenta(models.Model):
  2.     Alumno = models.ForeignKey(Alumno)
  3.     fecha = models.DateField()
  4.     detalle = models.CharField(max_length=300)
  5.     importe = models.FloatField()
  6.  
  7. class Alumno(models.Model):
  8.     dni = models.IntegerField(primary_key=True)
  9.     apellido = models.CharField(max_length=100)
  10.     nombre = models.CharField(max_length=100)
  11.     domicilio = models.CharField(max_length=100)
  12.     localidad = models.CharField(max_length=100, default='localidad')
  13.     email = models.EmailField(default= '[email protected]')
  14.  
  15. forms.py:
  16.  
  17. class CuentaForm(forms.ModelForm):
  18.     class Meta:
  19.         model = Cuenta
  20.         exclude = 'Alumno_id'
En el formulario hago el exclude = 'Alumno_id' para poder insertar luego el id de todos los alumnos sino la validacion del formulario me pide ingresar un alumno puntual.

Última edición por razpeitia; 25/04/2013 a las 13:51
  #6 (permalink)  
Antiguo 25/04/2013, 13:58
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Insert Multiple

Mas o menos quedaría algo así.

Código Python:
Ver original
  1. def poceso_insertar(request):
  2.     lista_alumnos = Alumno.objects.all()
  3.     if request.method == "POST":
  4.         cuentaf = CuentaForm(request.POST)
  5.         if cuentaf.is_valid():
  6.             fecha = cuentaf.instance.fecha
  7.             detalle = cuentaf.instance.detalle
  8.             importe = cuentaf.instance.importe
  9.             for alumno in lista_alumnos:
  10.                 Cuenta.objects.create(Alumno=alumno, fecha=fecha, detalle=detalle, importe=importe)
  11.     else:
  12.         cuentaf = CuentaForm()
  13.  
  14.     return render_to_response ...
  #7 (permalink)  
Antiguo 25/04/2013, 14:11
 
Fecha de Ingreso: abril-2013
Mensajes: 10
Antigüedad: 11 años
Puntos: 0
De acuerdo Respuesta: Insert Multiple

Cita:
Iniciado por razpeitia Ver Mensaje
Mas o menos quedaría algo así.

Código Python:
Ver original
  1. def poceso_insertar(request):
  2.     lista_alumnos = Alumno.objects.all()
  3.     if request.method == "POST":
  4.         cuentaf = CuentaForm(request.POST)
  5.         if cuentaf.is_valid():
  6.             fecha = cuentaf.instance.fecha
  7.             detalle = cuentaf.instance.detalle
  8.             importe = cuentaf.instance.importe
  9.             for alumno in lista_alumnos:
  10.                 Cuenta.objects.create(Alumno=alumno, fecha=fecha, detalle=detalle, importe=importe)
  11.     else:
  12.         cuentaf = CuentaForm()
  13.     return render_to_response ...




Es así como dices! Muchas gracias!!!!

Etiquetas: django, insert
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:57.