Это вопрос Python, а не вопрос Django, откуда мой тег редактировать.
Чтобы воспроизвести эквивалент, скажем:
class MyForm(forms.Form):
foo = forms.CharField(max_length=100)
вам нужно что-то вроде:
f = type(forms.Form)('MyForm', forms.Form, d)
, где d
- словарь, подобный:
d = { 'foo': forms.CharField(max_length=100) }
Конечно, в конце класс формы будет связан с именем f
(вы можете использовать setattr
для привязки квалифицированное имя something.MyForm
для соответствующего something
, но пожалуйста даже не мечтайте связать его с голым именем, которое является динамически переменным -- это также было бы кошмаром для использования такого голого имени!).
Итак, чтобы воссоздать объект класса формы во время выполнения, вам нужно сохранить:
- его имя
MyForm
- диктовку с именами полей в качестве ключей и объектами полей в качестве значений
и для того, чтобы точка 2 работала, вам также необходимо сохранить для каждогополе (помимо его имени) имя типа (так что вы можете восстановить тип с помощью getattr
из forms
) и его именованный параметр(в качестве указания), поэтому вы можете в основном сделать
d [fieldname] = getattr (forms, fieldtypename) (** fieldparameters)
на основе строк fieldname
и fieldtypename
и dict fieldparameters
для каждого поля при перестройке словаря d
(т. е. подготовьтесь к выполнению шага 2 приведенного выше краткого списка; -).