django form populate multiple identical field form in one submit

375 Views Asked by At

I don't want to use django form class as they will not give me much flexibility.

I have a form where will random number field in easy request. i am trying to populate the multiple value of forms that appears.

this is my models.py

class Profile(models.Model):
    name = models.CharField(max_length=100)
    photo = models.FileField()

and this my form.html

<form method="POST" action="{% url 'form' %}">
    {% csrf_token %}

{% for i in range %}
  <input type="text" id="name" name="name"><br>
  <input type="file" id="photo" name="photo"><br><br>
  {% endfor %}


  <input type="submit" value="Submit">
</form> 

You may notice I am rendering field with for loop.

that is means, there will be as much field as possible can be appear based on user request.

So I want to populate these models.

my view looks like

def form_view(request):
    if request.method == 'POST':
        # Need to puplate the form
    return render(request, 'form.html', {'range': range(40)})

Can anyone please help me how can i achieve this? i am just struggling to achieve this.

1

There are 1 best solutions below

0
On BEST ANSWER

you can use modelformset_factory for this. this way,

in your views.py

from .models import Profile
from django.forms import modelformset_factory

def form_view(request):
    form_range = 40 # set the range here

    ProfileFormSet = modelformset_factory(Profile, fields=("name", "photo"), extra=form_range, max_num=form_range)
    formset = ProfileFormSet(request.POST or None)

    if request.method == "POST":
        if formset.is_valid():
            formset.save()

    return render(request, "form.html", {"profile_formset": formset})

and in your form html

<form method="POST" action="{% url 'form' %}">
    {% csrf_token %}

    {{ profile_formset.as_p }}

    <input type="submit" value="Submit">
</form>