gpt4 book ai didi

python - 在模型中存储动态表单

转载 作者:太空宇宙 更新时间:2023-11-04 01:42:17 27 4
gpt4 key购买 nike

我想使用 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)到name f(可以使用setattr绑定(bind)到qualified name something.MyForm 用于适当的 something,但是不要梦想将它绑定(bind)到一个名称那是动态变量——使用这样的裸名也是一场噩梦!)。

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

  1. 它的名字 MyForm
  2. 以字段名作为键,字段对象作为值的字典

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

d[fieldname] = getattr(forms, fieldtypename)(**fieldparameters)

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

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com