我觉得这一定非常简单,但经过几天的尝试,我才正式无能为力。
我有一个字典,其中键是对象,值是对象列表。以下是我希望如何使用该信息构建表单:
for object in dictionary:
name_of_field = object.slug
name_of_field = forms.ModelMultipleChoiceField(widgets=forms.CheckboxSelectMultiple, queryset=dictionary[object])
当然,将name_of_field放在那里两次并不能生成动态命名的字段。这实际上做的是创建一个名为" name_of_field"使用它迭代的最终对象。我希望它能为字典中的每个键创建一个字段,使用密钥对象的slug命名,并使用该键的值进行选择。
有没有办法遍历这个字典并创建我想要的表单字段?我觉得答案在于超级类__init__
,但我仍然无法理解如何获得具有不同名称的多个字段。
答案 0 :(得分:2)
您不知道您在何处使用此代码。您应该将其添加到表单的__init__
方法中,您可以在其中引用self.fields
:
class DynamicForm(forms.Form):
def __init__(self, *args, **kwargs):
dynamic_fields = kwargs.pop('dynamic_fields')
super(DynamicForm, self).__init__(*args, **kwargs)
for key, value in dynamic_fields:
self.fields[key.slug] = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple, queryset=value)