Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

193
Views
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
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!