从对象字典创建Django表单

时间:2014-04-24 17:15:30

标签: python django dictionary

我觉得这一定非常简单,但经过几天的尝试,我才正式无能为力。

我有一个字典,其中键是对象,值是对象列表。以下是我希望如何使用该信息构建表单:

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__,但我仍然无法理解如何获得具有不同名称的多个字段。

1 个答案:

答案 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)