django 表单在一次提交中填充多个相同的字段表单

django form populate multiple identical field form in one submit

我不想使用 django form class 因为它们不会给我太多灵活性。

我有一个表单,其中随机数字段很容易请求。我正在尝试填充出现的表单的多个值。

这是我的models.py

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

这是我的 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> 

您可能注意到我正在使用 for 循环渲染字段。

也就是说,会根据用户的要求出现尽可能多的字段。

所以我想填充这些模型。

我的观点是这样的

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

任何人都可以帮助我如何实现这一目标?我正在努力实现这一目标。

您可以为此使用 modelformset_factory。这样,

在你的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})

并在您的表单中 html

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

    {{ profile_formset.as_p }}

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