【问题标题】:Understanding django Form initialisation了解 django 表单初始化
【发布时间】:2013-11-20 14:30:55
【问题描述】:

我有这样的课:

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 是属性的每个对象副本,以防我想以某种方式更改它们?

谢谢。

【问题讨论】:

    标签: python django forms init


    【解决方案1】:

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

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

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

    表单类的字段可以通过self.base_fields访问。

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-14
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多