python - 在模型中存储动态形式

标签 python django-forms

我想使用 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) }

当然,最终表单类将绑定(bind)到名称f(您可以使用setattr将其绑定(bind)到限定名称something.MyForm 用于适当的something,但甚至不要梦想将其绑定(bind)到名称这是动态变量——使用这样的裸名也将是一场噩梦!)。

因此,要在运行时重新创建表单类对象,您需要保留:

  1. 其名称MyForm
  2. 以字段名称作为键、以字段对象作为值的字典

为了使第 2 点起作用,您同样需要为每个字段(除了其名称)保留 type 名称(这样您就可以使用 getattr 恢复类型)来自 forms)及其命名参数(作为字典),所以你基本上可以这样做

d[字段名称] = getattr(表单, 字段类型名称)(**字段参数)

基于字符串fieldnamefieldtypename以及字典fieldparameters,对于每个字段,当您重建字典d时(即,准备满足上述短列表中的第 2 步;-)。

关于python - 在模型中存储动态形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3792083/

相关文章:

python - 我想用 openCv 从图像中删除模糊的黑色边框

python - 如何使用 Paramiko 制作 sudo 命令

python - ewmvar 在 pandas 中的向后兼容性

python:当底层库记录到标准输出时使用ncurses

python - 模板 - 菜单

python - django:从构造函数或模型形式创建对象

python - 扩展形式悄无声息地失败了

django - 简单的 Django 图像上传 - 图像文件不保存

python - 每个子图旁边的 plotly 图例,Python

python - 创建 super 用户时创建日期行