django форма заполняет несколько одинаковых полей формы в одном отправлении - PullRequest
2 голосов
/ 14 июля 2020

Я не хочу использовать класс django form, поскольку они не дадут мне большой гибкости.

У меня есть форма, в которой будет поле случайных чисел в простом запросе. Я пытаюсь заполнить несколько значений отображаемых форм.

это мой models.py

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

и эта моя форма. 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> 

Вы можете заметить, что я визуализирую поле для l oop.

, это означает, что по запросу пользователя будет отображаться как можно больше полей.

Итак, я хочу для заполнения этих моделей.

мой вид выглядит как

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

Кто-нибудь, пожалуйста, помогите мне, как я могу этого добиться? Я просто пытаюсь достичь этого.

1 Ответ

1 голос
/ 28 июля 2020

вы можете использовать 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>
...