我有一个看起来像这样的表单类:
class RegisterForm(Form):
username = Field(model_field='username', filters=validators.minlength(3))
您会注意到username
是一个类变量。我相信这意味着Field
将在第一次使用RegisterForm
时(在重新启动apache之后)构建。它不会在页面重新加载之间重新构建(除非产生第二个 WSGI实例(?),但我们不会进入)。我注意到了这一点,因为我在Field.__init__
中设置的某些值未被重置。
但是,Form.__init__
似乎每次重新加载都会调用。我想这是因为我使用它的方式?我实际上是在每个页面请求中构建它form = RegisterForm(request)
。
所以...假设我不希望RegisterForm
中的[类变量“被”缓存“并在每次请求时重新初始化Fields
...我该怎么做那? (不修改RegisterForm
的语法;你可以在基类中做任何事情,Form
)
答案 0 :(得分:0)
您可以在每个实例化时更新类变量:
class ContactForm(forms.Form):
username = Field(model_field='username', filters=validators.minlength(3))
def __init__(self, *args, **kwargs):
super(ContactForm, self).__init__(*args, **kwargs)
ContactForm.username = Field(model_field='username', filters=validators.minlength(3))
答案 1 :(得分:0)
您可以在函数中定义类。这样每次调用函数时都会构造它。
def gotclass(data):
class InnerClass(object):
someattr = DoSomethingWith(data)
return InnerClass
MyNewClass = gotclass(42)
someobj = MyNewClass()