Динамическое создание нескольких форм
помогите решить небольшую проблему в Django. Я новичок в Python, и уже вторую неделю бьюсь над реализацией автоматического создания формы. В интернете по сложным формам не смог найти что-то подобное. Пробовал несколько вариантов. Но их реализовать не удалось. Вот один из последних.
Есть HTML форма: search.html
<h4> Искать по химическому составу </h4>
<form action="{% url 'searchte' %}" method="get" class="">
<h5> Выберите элементы для поиска </h5>
<table>
<tr><td>Cu <input type="checkbox" name="copper" value="Cu" checked></td>
<td>Fe <input type="checkbox" name="copper" value="Fe"></td>
<td>Co <input type="checkbox" name="copper" value="Co"></td>
<td>Ni <input type="checkbox" name="copper" value="Ni"></td>
<td>Zn <input type="checkbox" name="copper" value="Zn"></td>
<td>As <input type="checkbox" name="copper" value="As"></td>
.....
</table>
<button type="submit" class="btn btn-success"> Искать </button>
</form>
forms.py
class SearchForm(forms.Form):
elem = forms.CharField(label='элемент')
elemot = forms.DecimalField(label='от', max_digits=9, decimal_places=3)
elemdo = forms.DecimalField(label='до', max_digits=9, decimal_places=3)
typean = forms.ChoiceField(widget=forms.Select, choices=ANAL_CHOICES, label='Тип анализа')
views.py
def searchte(request):
error = ''
if ('copper' in request.GET) and request.GET['copper'].strip():
some_var = request.GET.getlist('copper')
numberform = len(some_var)
dicts = {}
while numberform > 0:
dicts[some_var[numberform - 1]] = str('form_' + str(numberform))
dicts.update({some_var[numberform - 1]: str('form_' + str(numberform))})
numberform -= 1
???
form = forms.SearchForm
form_1 = SearchForm(prefix="form_1")
form_2 = SearchForm(prefix="form_2")
form_3 = SearchForm(prefix="form_3")
form_dict = {'form_1': form_1, 'form_2': form_2, 'form_3': form_3}
return render(request, 'copperdb/searchte.html', context=form_dict)
else:
error = 'Форма была неверной'
form = forms.SearchForm
context = {
'form': form,
'error': error,
}
Как реализовать функцию, которая бы извлекала из словаря form_dict, то количество чекнутых элементов (от одного до неизвестного количества) на search.html и генерировало соответствующее количество таблиц из form.py на новую страницу searchte.html. При этом присваивало (и рендерила) таблице соответствующее значение элемента (ключ в form_dict) для дальнейшего поиска в БД.
searchte.html
{% extends 'main/base1.html' %}
{% block title %}
Поиск
{% endblock %}
{% block content %}
{% csrf_token %}
<form action="{% url 'searchte' %}" method="get" class="">
{{ form_1 }}<br>
{{ form_2 }}<br>
{{ form_3 }}<br>
{{ form_4 }}<br>
{{ form_... }}<br>
<button type="submit" class="btn btn-success"> Искать </button>
</form>
{% endblock %}
Может быть я слишком усложнил и это можно реализовать проще?