我有一个这样的类:
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
?
谢谢。
窗体类使用 DeclarativeFieldsMetaclass
,它启用字段的声明性语法。
该实现意味着表单类和实例实际上没有每个字段的属性self.field_name
。这就是为什么尝试使用self.users
会出错的原因。
表单实例的字段可以作为 self.fields
进行访问,这是在 __init__
方法中调用 super
时创建的。
表单类的字段可以按self.base_fields
访问。