Python中基于数据库查询的动态类(Django)
我想在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() 目标是为数据库查询返回的每个项创建一个表单字段。因此,如果我从查询中得到十个项,那么类中会有十个变量,每个变量都以返回的项命名 这
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很大。希望,我现在还不需要学习它的另一部分。