我有一个类似的课程:
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
,则底部的注释行完美无缺。
我是否正确地认为users
,subject
和message
是类级别,这就是为什么它们会从属性列表中弹出?
所以self.fields
是属性的每个对象副本,以防我想以某种方式更改它们吗?
感谢。
答案 0 :(得分:2)
Form类使用DeclarativeFieldsMetaclass
,它启用字段的声明性语法。
实现意味着表单类和实例实际上并不具有每个字段的属性self.field_name
。这就是为什么尝试使用self.users
会出错。
表单实例的字段可以self.fields
访问,super
是在__init__
方法中调用self.base_fields
时创建的。
表单类的字段可以{{1}}访问。