Динамическое добавление поля в форму python django

Я хочу иметь Django форму, в которой пользователь может добавить несколько stop_name, stop_longitude, stop_latitude используя Add more кнопку внутри. Допустим, у пользователя есть 3 названия остановок, поэтому ему придется дважды нажать на кнопку Add more. И при каждом добавлении вышеуказанные поля будут заполняться снова. Я новичок в Django, поэтому мне нужна помощь.

Это моя модель

class SupplyChainStops(models.Model):
    ingredient = models.ForeignKey(Ingredients, null=True, on_delete=models.CASCADE)
    stop_name = ArrayField(models.CharField(max_length=1024, null=True, blank=True))
    stop_longitude = ArrayField(models.CharField(max_length=500, null=True, blank=True))
    stop_latitude = ArrayField(models.CharField(max_length=500, null=True, blank=True))

Okey с помощью фабрики наборов форм очень просто и легко отобразить несколько полей для заполнения пользователем своей информации. Прежде всего, вам нужно будет создать forms.py в вашем проекте, а затем импортировать django's formset_factory в forms. Мы сделаем примерно так:

from django.forms import formset_factory
from .models import SupplyChainStops

# Here we are creating a formset to handle the maniplations of our form to
# have extra field by using the extra parameter to formset_factory
# and also we can add a delete function to allow users to be able to delete 

Formset = formset_factory(SupplyChainStops, fields=[' stop_name',' stop_longitude','stop_latitude'], extra=4, can_delete=True)
# I have set the formset to give us an extra field of four and enable users 
# to delete 

Теперь мы собираемся поработать над представлением для обработки нашего набора форм.

from django.views.generic.edit import FormView
from .forms import Formset

class formsetView( FormView):
      template_name = 'formset.html'
      form_class = Formset
      success_url = '/'
      
      

В нашем шаблоне мы сделаем что-то вроде этого .


<form method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Add">
</form>

Делаем это в представлении базы функций

from .forms import Formset

def formset_view(request):
    if request.method == 'POST':
       formset = Formset(request.POST,)
       if formset.is_valid():
          formset.save()
    else:
          formset = ()
    return render (request, 'formset.html',{'formset':formset} 

В вашем HTML-шаблоне

<form method="post">{% csrf_token %}
    {{ formset.as_p }}
    <input type="submit" value="Add">
</form>
Вернуться на верх