我想使用Django构建一个系统,该系统将允许用户构建表单,存储表单并让其客户使用它们。我知道如何动态创建表单,但是我正在寻找一种仍然可以使用表单类并以优雅的方式处理许多不同用户动态表单的好方法。
我正在考虑将表单字段信息作为字典存储在数据库中。 django中有什么方法可以将该字典重新解释为表单对象?还是我必须编写一个例程来自己解释和构建HTML表单?
如果有人知道将我指向该信息的位置,我将非常感激。
最佳答案
我的标签编辑从此开始,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
和fieldparameters
和字典d
(即,准备满足上面简短列表的步骤2 ;-)。关于python - 在模型中存储动态表单,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3792083/