Foros del Web » Programando para Internet » Python »

Editar Modelo con ManyToMany desde un Formulario

Estas en el tema de Editar Modelo con ManyToMany desde un Formulario en el foro de Python en Foros del Web. Hola, en los ultimos meses me entro la curiosidad de aprender un lenguaje de programación web, y opte por Python y Django. Estoy tratando de ...
  #1 (permalink)  
Antiguo 25/09/2012, 13:30
 
Fecha de Ingreso: septiembre-2012
Ubicación: Playa Del Carmen
Mensajes: 1
Antigüedad: 11 años, 7 meses
Puntos: 0
Pregunta Editar Modelo con ManyToMany desde un Formulario

Hola, en los ultimos meses me entro la curiosidad de aprender un lenguaje de programación web, y opte por Python y Django. Estoy tratando de construir una aplicación para crear cotizaciones.

Tengo 3 modelos principales Cliente, Productos y Cotizacion, aparte un modelo intermedio que usa el modelo de Cotizacion llamada CotizacionProductos.

Código Python:
Ver original
  1. # Modelo para los datos del cliente
  2. class Cliente(models.Model):
  3.     fecha = models.DateTimeField(auto_now_add=True)
  4.     nombre = models.CharField(max_length=100,verbose_name='Nombre del cliente')
  5.     email= models.CharField(max_length=100,verbose_name='Email del cliente')
  6.  
  7.     def __unicode__(self):
  8.         return '%s' % (self.nombre)
  9.  
  10.  
  11. # Modelo para los datos del producto que se utiliza para generar la cotizacion del cliente
  12. class Productos(models.Model):
  13.     nombre = models.CharField(max_length=200, verbose_name='Nombre del producto o servicio')
  14.     precio = models.DecimalField(max_digits=10,decimal_places=2,default=Decimal('0.00'))
  15.  
  16.     def __unicode__(self):
  17.         return '%s' % (self.nombre)
  18.  
  19. # Modelo para generar la cotizacion de un cliente.
  20. class Cotizacion(models.Model):  
  21.     fecha = models.DateTimeField(verbose_name='Fecha de Creación', auto_now_add=True, null=True)
  22.     datoscliente = models.ForeignKey(Cliente,verbose_name='Nombre del cliente')
  23.     productos = models.ManyToManyField(Productos,through='CotizacionProductos')
  24.  
  25.     # Preformateando la salida del texto
  26.     def __unicode__(self):
  27.         return 'Factura de' +' %s ' % (self.datoscliente.nombre)

Esta es mi tabla intermedia: CotizacionProductos

Código Python:
Ver original
  1. # modelo intermediario que utiliza  el modelo Cotizacion
  2. class CotizacionProductos(models.Model):
  3.     # relacionamos el modelo con el modelo de Cotizacion
  4.     cotizacion = models.ForeignKey(Cotizacion)    
  5.     producto = models.ForeignKey(Productos)
  6.     # campo que nos permite añadir el numero de articulos de un producto o servicio a cotizar
  7.     numero_productos = models.DecimalField(max_digits=10,decimal_places=0)
  8.     precio = models.DecimalField(max_digits=10,decimal_places=2,default=Decimal('0.00'))

Con estos modelos en el Backend de Django logro hacer lo que pretendo, eso lo logro con ayuda de una propiedad que se usa en el archivo admin.py llamada TabularInline. Aquí es como se ve:


Sin embargo, quiero lograr lo mismo pero en el Frontend que estoy desarrollando. He tratado con el uso de ModelForm, formset, pero sin resultados satisfactorios aun. ¿Cual es el mejor metodo de trabajar con este tipo de Modelos que tienen una relación muchos a muchos y una tabla intermedia como es mi caso?.

Espero me puedan iluminar =)

Saludos.
  #2 (permalink)  
Antiguo 08/10/2012, 15:53
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Editar Modelo con ManyToMany desde un Formulario

Efectivamente lo tienes que hacer con Formsets, solo que no se generan nuevos campos automáticamente, lo tienes que hacer manualmente con JavaScript, te dejo un ejemplo: http://stellarchariot.com/blog/2011/...pt-and-django/

Saludos
__________________
Grupo Telegram Docker en Español

Etiquetas: django, formulario, modelo, nombre, programa
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 01:20.