В forms.py
class DynamicForm(forms.Form):
options = [
('Textbox1', 'Textbox1'),
('Textbox2', 'Textbox2'),
...
]
dynamic_data = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, choices=options)
def __init__(self, *args, **kwargs):
super(DynamicForm, self).__init__(*args, **kwargs)
for i in range(1,len(self.options)+1):
self.fields['dd_func_'+str(i)] = forms.ChoiceField(widget=forms.Select, choices= [
('average', 'average'),
('sum', 'sum')], initial='sum', required=False)
def __getitem__(self, name):
try:
field = self.fields[name]
except KeyError:
raise KeyError('Key %r not found in Form' % name)
return forms.forms.BoundField(self, field, name)
В views.py
from app.forms import DynamicForm
def create_form(request):
if request.method == 'POST':
dynamic_form = DynamicForm(request.POST)
...
...
else:
dynamic_form = DynamicForm()
return render(request, 'form.html', {
'dynamic_form': dynamic_form
})
В шаблонах/form.html
{% load myfilters %}
{{ dynamic_form.dynamic_data.errors }}
{% for checkbox in dynamic_form.dynamic_data|checkboxiterator %}
{{ checkbox }}
{% with c=forloop.counter|stringformat:"s" %}
{% with c='dd_func_'|add:c %}
{{ dynamic_form|lookup:c }}
{% endwith %}
{% endwith %}
{% endfor %}
В templatetags/myfilters.py
https://djangosnippets.org/snippets/2159/
и
@register.filter
def lookup(f, name):
try:
return f[name]
except KeyError:
return None
Это действительно непонятно. Что такое «группа флажков выпадающих списков»? Что делать с изображениями на вашем снимке? –
Каждое поле поля должно содержать одно раскрывающееся меню –
Что должны делать эти выпадающие меню? Пример использования будет полезен (не предназначен для каламбуров). – frnhr