Чтобы ответить на ваш вопрос: всякий раз, когда вы инициализируете форму, она вызывает init (). Пример: form = testform()
. Это инициализирует вашу форму. То, что я хотел бы сделать здесь, это добавить некоторый JavaScript для создания этих новых полей. Я не уверен, насколько вы знакомы с javascript, но я собираюсь предположить, что вы можете понять это самостоятельно.
Что касается проверки, это можно сделать в форме. Однако сначала вы захотите сообщить, что добавили больше полей, используя <strong>init</strong>()
.
class TestCharField(forms.CharField):
def __init__(self, *args, **kwargs):
super(TestCharField, self).__init__(*args, **kwargs) # Needs * and **
def clean(self, value):
super(TestCharField, self).clean(value)
# Do custom validation in here
return value
class testform(forms.Form):
def __init__(self, *args, **kwargs):
super(testform, self).__init__(args, kwargs)
# args should be a list with the single QueryDict (GET or POST dict)
# that you passed it
for k,v in args[0].items():
if k.startswith('Q') and k not in self.fields.keys():
self.fields[k] = TestCharField(initial=v, required=True)
Вы можете назвать свое поле как угодно, оно не обязательно должно быть TestCharField. Просто не забудьте переименовать его в обоих местах. Это позволит вам заполнить столько полей, сколько захотите. Дайте мне знать, если это не сработает для вас.