我想在Django中做这样的事情:
class MyForm(forms.Form):
items = Items.objects.all()
for item in items:
# How does this part work?
exec(item.name) = forms.BooleanField()
目标是为数据库查询返回的每个项创建一个表单字段。因此,如果我从查询中返回十个项目,那么该类将包含十个变量,每个变量以返回的项目命名。
这似乎在理论上是可行的,但这里有一些危险吗?数据库中的项目不是用户生成的。
答案 0 :(得分:2)
您可以随意动态修改表单:
class MyForm(forms.Form):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
for item in Item.objects.all():
self.fields[item.name] = forms.BooleanField()
我认为危险在于,如果用户提交表单时数据库状态发生了变化,新表单会使用上一个表单没有的新字段进行初始化。
答案 1 :(得分:0)
如果我是你,我会使用django formsets。
为什么formsets不是这里的选项?