了解django表单初始化

时间:2013-11-20 14:30:56

标签: python django forms init

我有一个类似的课程:

class EmailForm(forms.Form):
    users = forms.MultipleChoiceField(required=False, widget=MultipleHiddenInput())
    subject = forms.CharField(max_length=100)
    message = forms.Textarea()

    def __init__(self, users, *args, **kwargs):
        super(EmailForm, self).__init__(*args, **kwargs)
        self.users.choices = users
        # self.fields['users'].choices = []

如果我使用它而不是self.users,则底部的注释行完美无缺。

我是否正确地认为userssubjectmessage是类级别,这就是为什么它们会从属性列表中弹出?

所以self.fields是属性的每个对象副本,以防我想以某种方式更改它们吗?

感谢。

1 个答案:

答案 0 :(得分:2)

Form类使用DeclarativeFieldsMetaclass,它启用字段的声明性语法。

实现意味着表单类和实例实际上并不具有每个字段的属性self.field_name。这就是为什么尝试使用self.users会出错。

表单实例的字段可以self.fields访问,super是在__init__方法中调用self.base_fields时创建的。

表单类的字段可以{{1}}访问。