Динамическое добавление поля в форму 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>