2010-07-04 69 views
0

我有一個表格類,它看起來是這樣的:Django + WSGI:強制對象初始化?

class RegisterForm(Form): 
    username = Field(model_field='username', filters=validators.minlength(3)) 

你會發現,username是一個類變量。我相信這意味着Field將被構建一次第一次使用RegisterForm(在apache重新啓動後)。它不會在頁面重新加載之間重新構建(除非產生第二個WSGI實例(?),但我們不會涉及)。我注意到這是因爲我在Field.__init__中設置的一些值未被重置。

但是,Form.__init__確實似乎被稱爲每頁重新加載。我想這是因爲我使用它的方式?我實際上在每個頁面請求上構建它,如form = RegisterForm(request)

因此......假設我不希望[緩存]中的[class variables in] RegisterForm,並且在每次請求時都重新初始化了Fields ......我該怎麼做? (不修改的RegisterForm的語法,你可以做任何的基類中,Form

回答

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

字段是描述符。這不起作用。 – 2010-07-04 23:20:44

0

你可以在一個函數中定義的類。這樣,每次調用函數時都會構造它。

def gotclass(data): 
    class InnerClass(object): 
    someattr = DoSomethingWith(data) 
    return InnerClass 

MyNewClass = gotclass(42) 
someobj = MyNewClass()