Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

185
Vistas
cómo agregar un formulario de modelo diferente a modelformset_factory

Con respecto a estos modelos:

 class Projects(models.Model): projectDescription = models.CharField(max_length=50,blank=True,null = True,) status = models.IntegerField(choices = Status_CHOICES, default = 4) projectOwner = models.ForeignKey(staff, on_delete=models.CASCADE, blank=True,null = True,) class Updates(models.Model): project = models.ForeignKey(Projects, on_delete=models.CASCADE) update = models.CharField(max_length=50,blank=True,null = True,) updateDate = models.DateTimeField(default = timezone.now, editable = False) addedBy = models.CharField(max_length=35,blank=True,)

Quiero crear una vista que muestre formularios para todos los proyectos actuales. Esto es fácil usando un modelformset_factory . Pero, ¿cómo puedo agregar un formulario adicional a cada una de estas instancias de formulario de proyecto para que se pueda realizar una actualización del proyecto (clave externa)? Idealmente, el usuario realiza cambios en varios proyectos, agrega una actualización a uno o varios proyectos y luego envía el formulario para guardar todos los cambios. Lo que tengo a continuación parece estar muy cerca, pero está guardando una actualización para cada proyecto con el valor de lo que haya escrito en el último formulario. Lo cual parece deberse a que la forma no es única. Seguí el camino de usar prefijos que tampoco parecían llevarme a ninguna parte. ¡ayuda!

formulario de actualización

 class updateForm(ModelForm): def __init__(self, *args, **kwargs): super(updateForm, self).__init__(*args, **kwargs) class Meta: model = Updates fields = ('update',)

vista:

 def MDSprojects(request): projects = Projects.objects.filter(dept = 'Assistive Technology') projectFormset = modelformset_factory(Projects, form=EditProjectForm, extra = 0) if request.method == 'POST': formsetA = projectFormset(request.POST,request.FILES) if formsetA.is_valid(): for f in formsetA: formA = f.save(commit = False) id = formA.id formA.save() formsetB = updateForm(request.POST,request.FILES) if formsetB.is_valid(): formB = formsetB.save(commit = False) project = Projects.objects.get(id = id) formB.project = project formB.save() else: print(formsetB.errors) return redirect('MDS_Projects') else: print(formsetA.errors) else: formsetA = projectFormset(queryset = projects) formsetB = updateForm() return render(request,'MDSprojectsB.html',{'formset':formsetA,'formsetB':formsetB,})

Plantilla:

 <form method="POST" enctype= multipart/form-data> {{ formset.management_form }} {% csrf_token %} {%for form in formset%} {{ form.management_form }} {% for hidden in form.hidden_fields %} {{ hidden }} {% endfor %} <div class="card border-primary mb-3" style="max-width: 85rem;"> <div class="card-header text-primary"> <strong>{{form.instance.projectDescription}}</strong> </div> <div class="card-body text-primary"> Project Name: {{form.projectDescription}}</div> <div class="card-body text-primary"> Status: {{form.status}}</div> <div class="card-body text-primary"> Status: {{form.projectOwner}}</div> <div class="card-body text-primary"> Status: {{form.priority}}</div> <div> {{ formsetB.management_form }} {% for hidden in formsetB.hidden_fields %} {{ hidden }} {% endfor %} {{formsetB}} </div> </div> {% endfor %} <button class="btn btn-success btn" type="submit">Save Changes</button> </form>

EDITAR:

Quizás otra forma de explicar mi pregunta es:

Si tuviera los mismos modelos que el anterior:

 class Projects(models.Model): projectDescription = models.CharField(max_length=50,blank=True,null = True,) status = models.IntegerField(choices = Status_CHOICES, default = 4) projectOwner = models.ForeignKey(staff, on_delete=models.CASCADE, blank=True,null = True,) class Updates(models.Model): project = models.ForeignKey(Projects, on_delete=models.CASCADE) update = models.CharField(max_length=50,blank=True,null = True,) updateDate = models.DateTimeField(default = timezone.now, editable = False) addedBy = models.CharField(max_length=35,blank=True,)

Quiero tener una vista que represente todos los proyectos actuales como formularios individuales para que el usuario pueda realizar cambios en el modelo del proyecto en una sola vista. Además, quiero que el usuario también pueda agregar una actualización a cada proyecto.

Entonces, por ejemplo, si tuviera 3 proyectos, esperaría ver 3 formularios en la página. Cada formulario contendría los campos para modificar este proyecto (por lo que estos campos de formulario se completarían previamente con los valores actuales). Luego, por último (la parte en la que estoy atascado) sería un campo vacío adicional para agregar una actualización al proyecto.

over 4 years ago · Santiago Trujillo
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda