Доброго времени суток друзья! Столкнулся с проблемой, возникновение которой пока не могу понять. Буду рад предложенным вариантам, в следствии которых происходит следующее:
Решил значит я создать класс для динамических форм. Создаю потомок от класса Form
, в нем переопределяю конструктор, и в соотвествии с шаблоном формы выбираю валидаторы полей. Примерно так:
def __init__(self, template, *args, **kwargs):
# Обратите внимание на этот комментарий. Суда приходится вставлять строчку кода, без которой все не работает.
# **************
if widget == 'r':
self.base_fields[field_name] = ChoiceField(required=require, label=label, choices=choices,
widget=RadioSelect())
# **************
super(DynamicForm, self).__init__(self, *args, **kwargs)
В представлении я создаю экземпляр формы и передаю
form = DynamicForm(template)
И вот магия! В ходе трассировки выявил, что при входе в конструктор свойство base_fields уже определено значениями, которые использовались при создании предыдущего экземпляра формы. И вот если в то место, которое обозначено комментарием не вставить self.base_fields.clear()
, то наборы форм генерятся неправильно, а если быть еще точнее, то последняя форма в списке будет неправильной. Все дело в том, что в представлении я собираю список форм
for template in self.get_object().templates.all():
formset.append(DynamicForm(template))
Может я чет затупил под конец рабочего дня и не могу разглядеть где же я лопухнулся...
Стандартные формсеты по ряду причин применять не получится, поэтому отдаю в шаблон именно "список форм", и последняя форма из этого списка содержит поля из предыдущей формы.