Python中基于数据库查询的动态类(Django)

Python中基于数据库查询的动态类(Django),python,django,django-forms,metaprogramming,Python,Django,Django Forms,Metaprogramming,我想在Django做这样的事情: class MyForm(forms.Form): items = Items.objects.all() for item in items: # How does this part work? exec(item.name) = forms.BooleanField() 目标是为数据库查询返回的每个项创建一个表单字段。因此,如果我从查询中得到十个项,那么类中会有十个变量,每个变量都以返回的项命名 这

我想在Django做这样的事情:

class MyForm(forms.Form):
     items = Items.objects.all()
     for item in items:
         # How does this part work?
         exec(item.name) = forms.BooleanField()
目标是为数据库查询返回的每个项创建一个表单字段。因此,如果我从查询中得到十个项,那么类中会有十个变量,每个变量都以返回的项命名


这在理论上似乎是可能的,但这里有危险吗?数据库中的项目不是用户生成的。

您可以根据需要动态修改表单:

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()

我认为危险在于,当用户提交表单时,数据库状态发生了变化,而新表单使用以前表单没有的新字段进行初始化

如果我是你,我会使用django表单集


为什么表单集不是这里的一个选项?

非常有魅力,谢谢。在我发布这篇文章之后,我还发现这篇文章真正深入了细节:实际上,我从未使用过表单集。Django很大。希望,我现在还不需要学习它的另一部分。