es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo guardar formularios de padre, hijo y nieto en una sola presentación de Django.

Estoy construyendo una aplicación para una empresa de trading móvil, esta es la situación: cada factura tiene un número de factura único y cada fecha única tienen varios modelos de teléfono y cada modelo de teléfono tiene un número de IMEI. Aquí es cómo he diseñado el modelo de base de datos.

class Collection(models.Model):
    admin = models.ForeignKey(User,on_delete=models.PROTECT)
    company = models.ForeignKey(Company,on_delete=models.PROTECT)
    invoice_no = models.IntegerField(unique=True)
    collection_date = models.DateTimeField(default=timezone.now)

class MobileCollection(models.Model):
    collection = models.ForeignKey(Collection,on_delete=models.PROTECT,related_name='collections')
    mobile = models.ForeignKey(ModelCategory,on_delete=models.PROTECT,related_name='model_category')
    qnt = models.IntegerField()
    price = models.DecimalField(decimal_places=3,max_digits=20)

class Imei(models.Model):
    mobile = models.ForeignKey(MobileCollection,on_delete=models.PROTECT)
    imei = models.CharField(max_length=15,unique=True)

Tengo que enviarlos todos de una sola vez! No estoy seguro de cómo construir su vista, mientras que el modelo de MobileCollection debería aumentar dinámicamente y con el campo qnt en MobileCollection los formularios de Imei deberían aumentar, por ejemplo, si el qnt=10 deberíamos agregar 10 formularios de Imei, pensé en inlineformset_factory pero no funciona en mi caso. ¿Hay un enfoque mejor para lograr eso? Gracias de antemano.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución:

    Una forma de lograr esto es usar JavaScript y jQuery para agregar dinámicamente más formularios para los modelos MobileCollection y Imei.

    Aquí están los pasos para implementar esta solución:

    1. Crear el formulario HTML para los modelos Collection, MobileCollection e Imei.
    2. Agregar un evento de clic JavaScript en el botón “Agregar móvil” del formulario.

    3. Dentro del evento de clic, clonar el elemento de formulario MobileCollection existente e incrementar los atributos name y id de los campos del formulario.

    4. Agregar otro evento de clic en el campo de entrada Imei que agregará dinámicamente más formularios Imei según la cantidad (qnt) ingresada por el usuario.

    5. Dentro del evento de clic del campo de entrada Imei, recorrer la cantidad ingresada y clonar el elemento de formulario Imei existente e incrementar el atributo name del campo del formulario y luego agregarlo al formulario de MobileCollection.

    6. Finalmente, enviar el formulario a la vista de Django usando jQuery Ajax.

    Este enfoque asegura flexibilidad ya que el usuario puede agregar tantas MobileCollections como desee y también les permite agregar múltiples formularios Imei por MobileCollection.

Comments are closed.